{"id":56544,"date":"2026-06-20T12:23:07","date_gmt":"2026-06-20T10:23:07","guid":{"rendered":"https:\/\/www.repscan.com\/analyseur-avis-ia\/"},"modified":"2026-06-20T12:27:00","modified_gmt":"2026-06-20T10:27:00","slug":"analyseur-avis-ia","status":"publish","type":"page","link":"https:\/\/www.repscan.com\/fr\/analyseur-avis-ia\/","title":{"rendered":"Analyseur d&rsquo;avis gratuit avec IA"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"56544\" class=\"elementor elementor-56544 elementor-50733\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-section elementor-top-section elementor-element elementor-element-62b04d9 elementor-section-stretched elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"62b04d9\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;,&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-9194cbe\" data-id=\"9194cbe\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a7447a5 elementor-widget elementor-widget-heading\" data-id=\"a7447a5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Analyseur d'avis gratuit avec IA<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5014f96 elementor-widget elementor-widget-text-editor\" data-id=\"5014f96\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Collez les avis de votre fiche Google, Trustpilot ou de toute autre plateforme et obtenez en quelques secondes une analyse compl\u00e8te :<br \/>Score de sentiment, r\u00e9partition positive\/n\u00e9gative, th\u00e8mes les plus mentionn\u00e9s et un r\u00e9sum\u00e9 ex\u00e9cutif pr\u00eat pour la prise de d\u00e9cision.<\/p><p><strong>Sans limites. 100% gratuit.<\/strong><\/p><p><strong>Cet analyseur est une version simplifi\u00e9e du <a href=\"https:\/\/www.repscan.com\/fr\/plateforme-de-gestion-des-avis\/\"><span style=\"text-decoration: underline;\"><span style=\"color: #ff9900; text-decoration: underline;\">Logiciel de gestion des avis.<\/span><\/span><\/a><\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1c85f83 elementor-widget elementor-widget-html\" data-id=\"1c85f83\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div style=\"justify-content: center\" class=\"botones\">\n  <a href=\"https:\/\/www.repscan.com\/fr\/eshop\/#sidebar-triki\" id=\"boton-cta-izquierda\" class=\"boton-cta-izquierda\">\n    Souscrire maintenant\n    <span>\u279c<\/span>\n  <\/a>\n\n  <a href=\"https:\/\/www.repscan.com\/fr\/plateforme-de-gestion-des-avis\/\" id=\"boton-cta-derecha\" class=\"boton-cta-derecha\" target=\"_blank\" rel=\"noopener noreferrer\">\n    Plus d'infos\n    <span>\u279c<\/span>\n  <\/a>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-section elementor-top-section elementor-element elementor-element-0bcf82b elementor-section-stretched elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0bcf82b\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e4f0fc3\" data-id=\"e4f0fc3\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-edb2992 elementor-widget elementor-widget-html\" data-id=\"edb2992\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n.ben2-wrap {\n  width: 100%;\n  max-width: 1200px;\n  margin: 0 auto;\n}\n\n.ben2-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 0;\n  border: 1.5px solid rgb(44 38 81);\n  border-radius: 20px;\n  overflow: hidden;\n  \n}\n\n\/* \u2500\u2500 TARJETA \u2500\u2500 *\/\n.ben2-card {\n  position: relative;\n  padding: 2.5rem 2rem 2.25rem;\n  b\n  display: flex;\n  flex-direction: column;\n  overflow: hidden;\n  transition: background 0.28s ease;\n}\n\n.ben2-card:not(:last-child) {\n  border-right: 1.5px solid rgba(255, 255, 255, 0.1);\n}\n\n.ben2-card:hover { background: rgba(255, 255, 255, 0.03); }\n\n.ben2-card::after {\n  content: '';\n  position: absolute;\n  inset: 0;\n  opacity: 0;\n  transition: opacity 0.3s ease;\n  pointer-events: none;\n}\n\n.ben2-card:nth-child(1)::after { background: radial-gradient(ellipse 80% 60% at 20% 110%, rgba(99, 102, 241, 0.15) 0%, transparent 70%); }\n.ben2-card:nth-child(2)::after { background: radial-gradient(ellipse 80% 60% at 50% 110%, rgba(34, 197, 94, 0.15) 0%, transparent 70%); }\n.ben2-card:nth-child(3)::after { background: radial-gradient(ellipse 80% 60% at 80% 110%, rgba(168, 85, 247, 0.15) 0%, transparent 70%); }\n.ben2-card:hover::after { opacity: 1; }\n\n\/* \u2500\u2500 NUMERACI\u00d3N \u2500\u2500 *\/\n.ben2-number {\n  font-size: 0.68rem;\n  font-weight: 700;\n  letter-spacing: 0.18em;\n  text-transform: uppercase;\n  margin-bottom: 1.75rem;\n  display: flex;\n  align-items: center;\n  gap: 0.6rem;\n}\n\n.ben2-number::before {\n  content: '';\n  display: inline-block;\n  width: 28px;\n  height: 2px;\n  border-radius: 2px;\n  flex-shrink: 0;\n}\n\n.ben2-card:nth-child(1) .ben2-number { color: #818cf8; }\n.ben2-card:nth-child(1) .ben2-number::before { background: #818cf8; }\n.ben2-card:nth-child(2) .ben2-number { color: #4ade80; }\n.ben2-card:nth-child(2) .ben2-number::before { background: #4ade80; }\n.ben2-card:nth-child(3) .ben2-number { color: #c084fc; }\n.ben2-card:nth-child(3) .ben2-number::before { background: #c084fc; }\n\n\/* \u2500\u2500 ICONO \u2500\u2500 *\/\n.ben2-icon {\n  width: 52px;\n  height: 52px;\n  border-radius: 14px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin-bottom: 1.4rem;\n  position: relative;\n  z-index: 1;\n  transition: transform 0.22s ease;\n}\n\n.ben2-card:hover .ben2-icon { transform: scale(1.08); }\n\n.ben2-card:nth-child(1) .ben2-icon { background: rgba(99, 102, 241, 0.15); border: 1px solid rgba(99, 102, 241, 0.2); }\n.ben2-card:nth-child(2) .ben2-icon { background: rgba(34, 197, 94, 0.15); border: 1px solid rgba(34, 197, 94, 0.2); }\n.ben2-card:nth-child(3) .ben2-icon { background: rgba(168, 85, 247, 0.15); border: 1px solid rgba(168, 85, 247, 0.2); }\n\n.ben2-card:nth-child(1) .ben2-icon svg { color: #818cf8; }\n.ben2-card:nth-child(2) .ben2-icon svg { color: #4ade80; }\n.ben2-card:nth-child(3) .ben2-icon svg { color: #c084fc; }\n\n\/* \u2500\u2500 T\u00cdTULO \u2500\u2500 *\/\n.ben2-title {\n  font-size: 1.12rem;\n  font-weight: 700;\n  color: #ffffff;\n  line-height: 1.25;\n  margin-bottom: 0.7rem;\n  position: relative;\n  z-index: 1;\n}\n\n\/* \u2500\u2500 DESC \u2500\u2500 *\/\n.ben2-desc {\n  font-size: 0.88rem;\n  color: rgba(255, 255, 255, 0.6);\n  line-height: 1.72;\n  position: relative;\n  z-index: 1;\n  flex: 1;\n}\n\n\/* \u2500\u2500 TAG \u2500\u2500 *\/\n.ben2-tag {\n  display: inline-flex;\n  align-items: center;\n  gap: 0.4rem;\n  margin-top: 1.6rem;\n  font-size: 0.7rem;\n  font-weight: 600;\n  letter-spacing: 0.05em;\n  text-transform: uppercase;\n  padding: 0.28rem 0.7rem;\n  border-radius: 999px;\n  position: relative;\n  z-index: 1;\n  width: fit-content;\n}\n\n.ben2-card:nth-child(1) .ben2-tag { color: #818cf8; background: rgba(99, 102, 241, 0.15); border: 1px solid rgba(99, 102, 241, 0.2); }\n.ben2-card:nth-child(2) .ben2-tag { color: #4ade80; background: rgba(34, 197, 94, 0.15); border: 1px solid rgba(34, 197, 94, 0.2); }\n.ben2-card:nth-child(3) .ben2-tag { color: #c084fc; background: rgba(168, 85, 247, 0.15); border: 1px solid rgba(168, 85, 247, 0.2); }\n\n.ben2-tag-dot {\n  width: 5px; height: 5px;\n  border-radius: 50%;\n  flex-shrink: 0;\n}\n\n.ben2-card:nth-child(1) .ben2-tag-dot { background: #818cf8; }\n.ben2-card:nth-child(2) .ben2-tag-dot { background: #4ade80; }\n.ben2-card:nth-child(3) .ben2-tag-dot { background: #c084fc; }\n\n\/* \u2500\u2500 RESPONSIVE \u2500\u2500 *\/\n@media (max-width: 480px) {\n  .ben2-grid {\n    grid-template-columns: 1fr;\n    border-radius: 16px;\n  }\n  .ben2-card:not(:last-child) {\n    border-right: none;\n    border-bottom: 1.5px solid rgba(255, 255, 255, 0.1);\n  }\n  .ben2-card { padding: 1.75rem 1.4rem; }\n}\n\n@media (min-width: 481px) and (max-width: 768px) {\n  .ben2-grid {\n    grid-template-columns: 1fr 1fr;\n    border-radius: 16px;\n  }\n  .ben2-card:nth-child(1),\n  .ben2-card:nth-child(2) {\n    border-bottom: 1.5px solid rgba(255, 255, 255, 0.1);\n  }\n  .ben2-card:nth-child(2) { border-right: none; }\n  .ben2-card:nth-child(3) { border-right: none; grid-column: 1 \/ -1; }\n}\n<\/style>\n\n<div class=\"ben2-wrap\">\n  <div class=\"ben2-grid\">\n\n    <div class=\"ben2-card\">\n      <div class=\"ben2-number\">01 \u2014 Analyse<\/div>\n      <div class=\"ben2-icon\">\n        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7z\"\/>\n          <circle cx=\"12\" cy=\"12\" r=\"3\"\/>\n        <\/svg>\n      <\/div>\n      <div class=\"ben2-title\">D\u00e9tectez des sch\u00e9mas cach\u00e9s<\/div>\n      <div class=\"ben2-desc\">Identifiez quels aspects de votre entreprise g\u00e9n\u00e8rent le plus de satisfaction ou de rejet chez vos clients, sans lire chaque avis un par un.<\/div>\n      <div class=\"ben2-tag\"><span class=\"ben2-tag-dot\"><\/span>Sentiment automatique<\/div>\n    <\/div>\n\n    <div class=\"ben2-card\">\n      <div class=\"ben2-number\">02 \u2014 Donn\u00e9es<\/div>\n      <div class=\"ben2-icon\">\n        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <polyline points=\"22 12 18 12 15 21 9 3 6 12 2 12\"\/>\n        <\/svg>\n      <\/div>\n      <div class=\"ben2-title\">Comprenez votre r\u00e9putation<\/div>\n      <div class=\"ben2-desc\">Transformez des opinions dispers\u00e9es en donn\u00e9es structur\u00e9es : score de sentiment, r\u00e9partition et th\u00e8mes cl\u00e9s d'un seul coup d'\u0153il.<\/div>\n      <div class=\"ben2-tag\"><span class=\"ben2-tag-dot\"><\/span>R\u00e9sum\u00e9 ex\u00e9cutif<\/div>\n    <\/div>\n\n    <div class=\"ben2-card\">\n      <div class=\"ben2-number\">03 \u2014 Vitesse<\/div>\n      <div class=\"ben2-icon\">\n        <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"\/>\n        <\/svg>\n      <\/div>\n      <div class=\"ben2-title\">Des r\u00e9sultats en quelques secondes<\/div>\n      <div class=\"ben2-desc\">Vous n'avez besoin que de votre e-mail. Collez vos avis de Google Maps ou Trustpilot et obtenez l'analyse compl\u00e8te en quelques secondes.<\/div>\n      <div class=\"ben2-tag\"><span class=\"ben2-tag-dot\"><\/span>Analyse instantan\u00e9e<\/div>\n    <\/div>\n\n  <\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-section elementor-top-section elementor-element elementor-element-cb6e21f elementor-section-stretched elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"cb6e21f\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-bb2bdb1\" data-id=\"bb2bdb1\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2b18dc4 elementor-widget elementor-widget-html\" data-id=\"2b18dc4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\nh1.entry-title{display:none;}\n\n\/* \u2500\u2500 ReviewAnalyzer \u2014 dark theme (#070032) \u2500\u2500 *\/\n:root{\n  --ra-page:#070032;\n\n  --ra-surface: rgba(255,255,255,.06);\n  --ra-surface2: rgba(255,255,255,.04);\n  --ra-surface3: rgba(255,255,255,.08);\n  --ra-border: rgba(255,255,255,.10);\n  --ra-border2: rgba(255,255,255,.16);\n\n  --ra-text: rgba(255,255,255,.92);\n  --ra-muted: rgba(255,255,255,.68);\n  --ra-muted2: rgba(255,255,255,.55);\n\n  --ra-blue:#4f80ff;\n  --ra-blue2:#002068;\n  --ra-violet:#8b5cf6;\n  --ra-cyan:#22d3ee;\n\n  --ra-green:#34d399;\n  --ra-green-dim: rgba(52,211,153,.10);\n  --ra-green-border: rgba(52,211,153,.28);\n\n  --ra-red:#fb7185;\n  --ra-red-dim: rgba(251,113,133,.10);\n  --ra-red-border: rgba(251,113,133,.28);\n\n  --ra-amber:#fbbf24;\n  --ra-amber-dim: rgba(251,191,36,.10);\n  --ra-amber-border: rgba(251,191,36,.28);\n\n  --ra-shadow: 0 1px 0 rgba(255,255,255,.05), 0 18px 60px rgba(0,0,0,.45);\n}\n\n.ra-wrap{\n  font-family:inherit;\n  color:var(--ra-text);\n  line-height:1.6;\n  width:100%;\n  max-width:1200px;\n  margin:0 auto;\n  overflow-x:hidden;\n}\n\n\/* Fondo oscuro para la zona del widget *\/\n.ra-wrap::before{\n  content:\"\";\n  position:fixed;\n  inset:0;\n  background:\n    radial-gradient(900px 420px at 18% 20%, rgba(79,128,255,.18), transparent 55%),\n    radial-gradient(820px 380px at 78% 28%, rgba(251,191,36,.10), transparent 58%),\n    radial-gradient(900px 520px at 55% 78%, rgba(52,211,153,.10), transparent 60%),\n    linear-gradient(180deg, #070032 0%, #070032 100%);\n  pointer-events:none;\n  z-index:-1;\n}\n\n\/* \u2500\u2500 FORMAT SELECTOR \u2500\u2500 *\/\n.ra-format-selector{ margin-bottom:0; }\n\n.ra-fmt-btns{\n  display:flex;\n  gap:0.4rem;\n  flex-wrap:wrap;\n}\n\n.ra-fmt-btn{\n  padding:0.32rem 0.85rem;\n  border-radius:8px;\n  border:1px solid var(--ra-border);\n  background:rgba(255,255,255,.03);\n  color:var(--ra-muted);\n  font-size:0.95rem !important;\n  font-weight:600;\n  cursor:pointer;\n  transition:all .15s ease;\n}\n\n.ra-fmt-btn:hover{\n  border-color:rgba(79,128,255,.55);\n  color:rgba(255,255,255,.9);\n  background:rgba(79,128,255,.10);\n}\n\n.ra-fmt-btn.active{\n  background:rgba(79,128,255,.18);\n  border-color:rgba(79,128,255,.65);\n  color:rgba(255,255,255,.92);\n}\n\n\/* \u2500\u2500 INPUT \u2500\u2500 *\/\n.ra-input-card{\n  background:rgba(255,255,255,.05);\n  border:1px solid var(--ra-border);\n  border-radius:18px;\n  padding:1.5rem;\n  margin-bottom:1rem;\n  box-shadow:var(--ra-shadow);\n  backdrop-filter:blur(10px);\n  -webkit-backdrop-filter:blur(10px);\n  box-sizing:border-box;\n  min-width:0;\n}\n\n.ra-input-head{\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  gap:1rem;\n  flex-wrap:wrap;\n  margin-bottom:1rem;\n  min-width:0;\n}\n\n.ra-input-head-badge{\n  display:inline-flex;\n  align-items:center;\n  gap:0.45rem;\n  padding:0.45rem 0.75rem;\n  border-radius:999px;\n  background:rgba(139,92,246,.14);\n  border:1px solid rgba(139,92,246,.26);\n  color:#fff;\n  font-size:0.78rem;\n  font-weight:700;\n  letter-spacing:.04em;\n  text-transform:uppercase;\n}\n\n.ra-input-head-badge svg{\n  flex-shrink:0;\n}\n\n.ra-input-head-text{\n  font-size:0.82rem;\n  color:var(--ra-muted);\n  max-width:620px;\n  min-width:0;\n}\n\n.ra-input-label{\n  font-size:0.72rem;\n  font-weight:700;\n  letter-spacing:0.08em;\n  text-transform:uppercase;\n  color:var(--ra-muted);\n  margin-bottom:0.65rem;\n  display:flex;\n  align-items:center;\n  gap:0.45rem;\n}\n\n.ra-input-label span{\n  display:inline-block;\n  width:6px;\n  height:6px;\n  border-radius:50%;\n  background:var(--ra-blue);\n  box-shadow:0 0 0 6px rgba(79,128,255,.10);\n}\n\n.ra-wrap textarea{\n  width:100%;\n  min-height:200px;\n  background:rgba(0,0,0,.18);\n  border:1px solid var(--ra-border);\n  border-radius:14px;\n  padding:1rem;\n  font-family:inherit;\n  font-size:0.88rem;\n  color:var(--ra-text);\n  line-height:1.7;\n  resize:vertical;\n  outline:none;\n  transition:border-color .2s, box-shadow .2s, background .2s;\n  box-sizing:border-box;\n}\n\n.ra-wrap textarea:focus{\n  border-color:rgba(79,128,255,.65);\n  box-shadow:0 0 0 4px rgba(79,128,255,.14);\n  background:rgba(0,0,0,.22);\n}\n\n.ra-wrap textarea::placeholder{ color:var(--ra-muted2); }\n\n.ra-input-footer{\n  display:flex;\n  align-items:center;\n  justify-content:space-between;\n  margin-top:0.85rem;\n  flex-wrap:wrap;\n  gap:0.5rem;\n  min-width:0;\n}\n\n.ra-char-count{ font-size:0.72rem; color:var(--ra-muted2); }\n.ra-hint-text{ font-size:0.7rem; color:var(--ra-muted2); font-style:italic; }\n\n\/* \u2500\u2500 BOTONES \u2500\u2500 *\/\n.ra-actions{\n  display:flex;\n  gap:0.6rem;\n  flex-wrap:wrap;\n  margin-top:1rem;\n  min-width:0;\n}\n\n.ra-btn-analyze,\n.ra-btn-clear{\n  display:inline-flex;\n  align-items:center;\n  gap:0.6rem;\n  padding:0.82rem 1.1rem;\n  border-radius:14px;\n  font-family:inherit;\n  font-size:14px !important;\n  font-weight:700;\n  cursor:pointer;\n  transition:transform .15s ease, box-shadow .15s ease, background .15s ease, border-color .15s ease, color .15s ease;\n  justify-content:center;\n  box-sizing:border-box;\n}\n\n.ra-btn-analyze{\n  background:linear-gradient(90deg, var(--ra-blue2), var(--ra-blue));\n  color:#fff;\n  border:1px solid rgba(79,128,255,.18);\n  flex:1 1 240px;\n  box-shadow:0 10px 28px rgba(0,32,104,.35);\n  min-width:0;\n}\n\n.ra-btn-analyze:hover{\n  transform:translateY(-1px);\n  box-shadow:0 14px 36px rgba(0,32,104,.42);\n}\n\n.ra-btn-analyze.loading{ opacity:.65; pointer-events:none; }\n\n.ra-btn-clear{\n  background:rgba(255,255,255,.03);\n  color:var(--ra-muted);\n  border:1px solid var(--ra-border);\n  flex:0 0 auto;\n}\n\n.ra-btn-clear:hover{\n  border-color:var(--ra-border2);\n  color:rgba(255,255,255,.9);\n  background:rgba(255,255,255,.05);\n}\n\n\/* \u2500\u2500 RESULTADOS \u2500\u2500 *\/\n.ra-results{\n  display:none;\n  animation:ra-fadeIn .35s ease;\n  min-width:0;\n}\n\n.ra-results.visible{ display:block; }\n\n@keyframes ra-fadeIn{\n  from{ opacity:0; transform:translateY(14px); }\n  to{ opacity:1; transform:translateY(0); }\n}\n\n.ra-results-grid{\n  display:grid;\n  grid-template-columns:1fr 1fr;\n  gap:1rem;\n  margin-bottom:1rem;\n  min-width:0;\n}\n\n\/* \u2500\u2500 TARJETA \u2500\u2500 *\/\n.ra-card{\n  background:rgba(255,255,255,.05);\n  border:1px solid var(--ra-border);\n  border-radius:18px;\n  padding:1.35rem;\n  box-shadow:var(--ra-shadow);\n  backdrop-filter:blur(10px);\n  -webkit-backdrop-filter:blur(10px);\n  box-sizing:border-box;\n  min-width:0;\n}\n\n.ra-card.soft{\n  background:linear-gradient(180deg, rgba(255,255,255,.08), rgba(255,255,255,.05));\n}\n\n.ra-card.ai{\n  background:\n    radial-gradient(260px 160px at 10% 0%, rgba(139,92,246,.22), transparent 65%),\n    radial-gradient(260px 160px at 100% 100%, rgba(34,211,238,.14), transparent 65%),\n    rgba(255,255,255,.06);\n}\n\n.ra-card.highlight{\n  background:\n    radial-gradient(280px 160px at 100% 0%, rgba(79,128,255,.18), transparent 68%),\n    rgba(255,255,255,.07);\n}\n\n.ra-card.glass-light{\n  background:linear-gradient(180deg, rgba(255,255,255,.11), rgba(255,255,255,.06));\n}\n\n.ra-card-label{\n  font-size:1rem !important;\n  font-weight:700;\n  letter-spacing:0.02em;\n  text-transform:none;\n  color:rgba(255,255,255,.94);\n  margin-bottom:1rem;\n  display:flex;\n  align-items:center;\n  gap:0.5rem;\n  flex-wrap:wrap;\n  row-gap:0.45rem;\n  min-width:0;\n}\n\n.ra-ai-chip{\n  display:inline-flex;\n  align-items:center;\n  gap:6px;\n  padding:6px 10px;\n  border-radius:999px;\n  background:rgba(139,92,246,.16);\n  border:1px solid rgba(139,92,246,.28);\n  color:rgba(255,255,255,.92);\n  font-size:0.68rem;\n  font-weight:700;\n  letter-spacing:.05em;\n  text-transform:uppercase;\n  max-width:100%;\n  box-sizing:border-box;\n}\n\n.ra-ai-chip svg{\n  flex-shrink:0;\n}\n\n\/* \u2500\u2500 PUNTUACI\u00d3N \u2500\u2500 *\/\n.ra-score-card{\n  grid-column:1 \/ -1;\n  display:grid;\n  grid-template-columns:minmax(280px, 430px) 1fr;\n  gap:1rem;\n  align-items:stretch;\n  background:\n    radial-gradient(280px 180px at 0% 0%, rgba(139,92,246,.18), transparent 70%),\n    radial-gradient(280px 180px at 100% 100%, rgba(34,211,238,.12), transparent 70%),\n    linear-gradient(180deg, rgba(255,255,255,.10), rgba(255,255,255,.06));\n  min-width:0;\n}\n\n.ra-score-left{\n  display:flex;\n  flex-direction:column;\n  justify-content:space-between;\n  gap:1rem;\n  min-width:0;\n}\n\n.ra-score-main{\n  display:flex;\n  align-items:baseline;\n  gap:0.3rem;\n  min-width:0;\n  flex-wrap:wrap;\n}\n\n.ra-score-num{\n  font-size:4.5rem;\n  font-weight:800;\n  letter-spacing:-0.05em;\n  line-height:1;\n}\n\n.ra-score-denom{ font-size:1.4rem; color:var(--ra-muted); }\n\n.ra-score-bar-wrap{\n  min-width:0;\n  width:100%;\n}\n\n.ra-score-bar-track{\n  height:6px;\n  background:rgba(255,255,255,.08);\n  border-radius:999px;\n  overflow:hidden;\n  margin-bottom:0.5rem;\n}\n\n.ra-score-bar-fill{\n  height:100%;\n  border-radius:999px;\n  transition:width 1s cubic-bezier(0.4,0,0.2,1);\n  width:0;\n}\n\n.ra-score-verdict{\n  font-size:0.8rem;\n  font-weight:600;\n  color:var(--ra-muted);\n}\n\n.ra-stars-wrap{\n  display:flex;\n  align-items:center;\n  gap:0.75rem;\n  margin-top:0.9rem;\n  flex-wrap:wrap;\n  min-width:0;\n}\n\n.ra-stars{\n  display:flex;\n  align-items:center;\n  gap:4px;\n  font-size:1.45rem;\n  line-height:1;\n  flex-wrap:wrap;\n}\n\n.ra-stars .star{\n  color:rgba(255,255,255,.18);\n}\n\n.ra-stars .star.fill{\n  color:#ffd665;\n  text-shadow:0 0 12px rgba(255,214,101,.18);\n}\n\n.ra-stars-meta{\n  font-size:0.82rem;\n  color:var(--ra-muted);\n  min-width:0;\n}\n\n.ra-score-side{\n  display:grid;\n  grid-template-columns:repeat(3,1fr);\n  gap:0.75rem;\n  min-width:0;\n}\n\n.ra-side-kpi{\n  background:rgba(255,255,255,.06);\n  border:1px solid var(--ra-border);\n  border-radius:16px;\n  padding:1rem;\n  min-height:156px;\n  display:flex;\n  flex-direction:column;\n  justify-content:space-between;\n  box-sizing:border-box;\n  min-width:0;\n}\n\n.ra-side-kpi-label{\n  font-size:0.72rem;\n  font-weight:800;\n  letter-spacing:0.08em;\n  text-transform:uppercase;\n  color:var(--ra-muted);\n  margin-bottom:0.55rem;\n}\n\n.ra-side-kpi-value{\n  font-size:2rem;\n  font-weight:800;\n  line-height:1;\n  color:rgba(255,255,255,.95);\n  margin-bottom:0.35rem;\n  min-width:0;\n}\n\n.ra-side-kpi-text{\n  font-size:0.74rem;\n  color:var(--ra-muted);\n  line-height:1.45;\n}\n\n.ra-side-kpi-visual{\n  margin-top:0.7rem;\n  min-width:0;\n}\n\n.ra-mini-stars{\n  display:flex;\n  gap:3px;\n  font-size:1rem;\n  line-height:1;\n  margin-bottom:0.35rem;\n  flex-wrap:wrap;\n}\n\n.ra-mini-stars .star{\n  color:rgba(255,255,255,.16);\n}\n\n.ra-mini-stars .star.fill{\n  color:#ffd665;\n}\n\n.ra-mini-bar{\n  width:100%;\n  height:8px;\n  border-radius:999px;\n  background:rgba(255,255,255,.08);\n  overflow:hidden;\n}\n\n.ra-mini-bar-fill{\n  height:100%;\n  width:0%;\n  transition:width 1s ease;\n  border-radius:999px;\n}\n\n.ra-mini-bar-fill.green{ background:var(--ra-green); }\n.ra-mini-bar-fill.red{ background:var(--ra-red); }\n\n.ra-mini-pill{\n  display:inline-flex;\n  align-items:center;\n  gap:6px;\n  padding:6px 10px;\n  border-radius:999px;\n  font-size:0.72rem;\n  font-weight:700;\n  background:rgba(255,255,255,.06);\n  border:1px solid var(--ra-border);\n  color:#fff;\n  max-width:100%;\n  box-sizing:border-box;\n}\n\n.ra-mini-pill .dot{\n  width:8px;\n  height:8px;\n  border-radius:50%;\n  display:inline-block;\n  flex:0 0 auto;\n}\n\n.ra-mini-pill.low .dot{ background:var(--ra-green); }\n.ra-mini-pill.mid .dot{ background:var(--ra-amber); }\n.ra-mini-pill.high .dot{ background:var(--ra-red); }\n\n\/* \u2500\u2500 DISTRIBUCI\u00d3N \u2500\u2500 *\/\n.ra-posneg-row{\n  display:flex;\n  gap:0.5rem;\n  margin-bottom:1rem;\n  flex-wrap:wrap;\n  min-width:0;\n}\n\n.ra-posneg-pill{\n  flex:1;\n  border-radius:16px;\n  padding:0.95rem 1rem;\n  text-align:center;\n  background:rgba(255,255,255,.03);\n  border:1px solid var(--ra-border);\n  min-width:0;\n  box-sizing:border-box;\n}\n\n.ra-posneg-pill.pos{ background:var(--ra-green-dim); border-color:var(--ra-green-border); }\n.ra-posneg-pill.neg{ background:var(--ra-red-dim); border-color:var(--ra-red-border); }\n.ra-posneg-pill.neu{ background:var(--ra-amber-dim); border-color:var(--ra-amber-border); }\n\n.ra-pill-num{\n  font-size:1.8rem;\n  font-weight:800;\n  letter-spacing:-0.04em;\n  line-height:1.1;\n  margin-bottom:0.2rem;\n}\n\n.ra-pill-num.pos{ color:var(--ra-green); }\n.ra-pill-num.neg{ color:var(--ra-red); }\n.ra-pill-num.neu{ color:var(--ra-amber); }\n\n.ra-pill-label{\n  font-size:0.65rem;\n  font-weight:800;\n  letter-spacing:0.12em;\n  text-transform:uppercase;\n  color:var(--ra-muted);\n}\n\n.ra-ratio-bar{\n  height:5px;\n  border-radius:999px;\n  background:rgba(255,255,255,.08);\n  overflow:hidden;\n  display:flex;\n  gap:2px;\n  margin-top:0.4rem;\n}\n\n.ra-ratio-bar-pos,\n.ra-ratio-bar-neg{\n  height:100%;\n  border-radius:999px;\n  transition:width 1s ease;\n}\n\n.ra-ratio-bar-pos{ background:var(--ra-green); }\n.ra-ratio-bar-neg{ background:var(--ra-red); }\n\n\/* \u2500\u2500 TEMAS \u2500\u2500 *\/\n.ra-topics-list{\n  display:flex;\n  flex-direction:column;\n  gap:0.6rem;\n  min-width:0;\n}\n\n.ra-topic-row{\n  display:flex;\n  align-items:center;\n  gap:0.75rem;\n  min-width:0;\n}\n\n.ra-topic-name{\n  font-size:0.82rem;\n  color:rgba(255,255,255,.88);\n  font-weight:600;\n  width:148px;\n  flex-shrink:0;\n  white-space:nowrap;\n  overflow:hidden;\n  text-overflow:ellipsis;\n  min-width:0;\n}\n\n.ra-topic-track{\n  flex:1;\n  min-width:0;\n  height:6px;\n  background:rgba(255,255,255,.08);\n  border-radius:999px;\n  overflow:hidden;\n}\n\n.ra-topic-fill{\n  height:100%;\n  background:rgba(79,128,255,.95);\n  border-radius:999px;\n  transition:width 1s ease;\n  width:0;\n}\n\n.ra-topic-count{\n  font-size:0.78rem;\n  color:var(--ra-muted2);\n  width:24px;\n  text-align:right;\n  flex-shrink:0;\n}\n\n\/* \u2500\u2500 RESUMEN \u2500\u2500 *\/\n.ra-summary-card{ grid-column:1 \/ -1; }\n\n.ra-summary-text{\n  font-size:0.95rem;\n  line-height:1.9;\n  color:var(--ra-muted);\n  border-left:3px solid rgba(79,128,255,.85);\n  padding-left:1rem;\n  min-width:0;\n}\n\n.ra-summary-text strong{ color:rgba(255,255,255,.92); }\n\n\/* \u2500\u2500 KEYWORDS \u2500\u2500 *\/\n.ra-kw-cloud{\n  display:flex;\n  flex-wrap:wrap;\n  gap:0.4rem;\n  margin-top:0.25rem;\n  min-width:0;\n}\n\n.ra-kw-tag{\n  font-size:0.75rem;\n  padding:0.28rem 0.75rem;\n  border-radius:999px;\n  border:1px solid var(--ra-border);\n  color:var(--ra-muted);\n  background:rgba(255,255,255,.03);\n  max-width:100%;\n  box-sizing:border-box;\n}\n\n.ra-kw-tag.pos{\n  border-color:var(--ra-green-border);\n  color:var(--ra-green);\n  background:var(--ra-green-dim);\n}\n\n.ra-kw-tag.neg{\n  border-color:var(--ra-red-border);\n  color:var(--ra-red);\n  background:var(--ra-red-dim);\n}\n\n.ra-kw-tag.neu{\n  border-color:var(--ra-amber-border);\n  color:var(--ra-amber);\n  background:var(--ra-amber-dim);\n}\n\n\/* \u2500\u2500 NUEVAS M\u00c9TRICAS \u2500\u2500 *\/\n.ra-metrics-grid{\n  display:grid;\n  grid-template-columns:repeat(3,1fr);\n  gap:0.75rem;\n  min-width:0;\n}\n\n.ra-metric-box{\n  background:rgba(255,255,255,.04);\n  border:1px solid var(--ra-border);\n  border-radius:14px;\n  padding:1rem;\n  box-sizing:border-box;\n  min-width:0;\n}\n\n.ra-metric-label{\n  font-size:0.65rem;\n  font-weight:800;\n  letter-spacing:0.12em;\n  text-transform:uppercase;\n  color:var(--ra-muted);\n  margin-bottom:0.5rem;\n}\n\n.ra-metric-value{\n  font-size:1.8rem;\n  font-weight:800;\n  line-height:1;\n  letter-spacing:-0.04em;\n  color:rgba(255,255,255,.95);\n  margin-bottom:0.25rem;\n  min-width:0;\n}\n\n.ra-metric-desc{\n  font-size:0.78rem;\n  color:var(--ra-muted);\n  line-height:1.5;\n}\n\n.ra-status-chip{\n  display:inline-flex;\n  align-items:center;\n  gap:8px;\n  padding:8px 12px;\n  border-radius:999px;\n  font-size:0.75rem;\n  font-weight:700;\n  margin-bottom:0.9rem;\n  max-width:100%;\n  box-sizing:border-box;\n}\n\n.ra-status-chip.low{\n  background:var(--ra-green-dim);\n  border:1px solid var(--ra-green-border);\n  color:var(--ra-green);\n}\n\n.ra-status-chip.mid{\n  background:var(--ra-amber-dim);\n  border:1px solid var(--ra-amber-border);\n  color:var(--ra-amber);\n}\n\n.ra-status-chip.high{\n  background:var(--ra-red-dim);\n  border:1px solid var(--ra-red-border);\n  color:var(--ra-red);\n}\n\n.ra-bullets{\n  margin:0;\n  padding-left:1.1rem;\n  min-width:0;\n}\n\n.ra-bullets li{\n  color:var(--ra-muted);\n  margin-bottom:0.45rem;\n  line-height:1.65;\n}\n\n.ra-bullets li strong{\n  color:rgba(255,255,255,.92);\n}\n\n.ra-visual-split{\n  display:grid;\n  grid-template-columns:repeat(3,1fr);\n  gap:0.75rem;\n  min-width:0;\n}\n\n.ra-visual-item{\n  background:rgba(255,255,255,.05);\n  border:1px solid var(--ra-border);\n  border-radius:14px;\n  padding:1rem;\n  box-sizing:border-box;\n  min-width:0;\n}\n\n.ra-visual-title{\n  font-size:0.72rem;\n  font-weight:800;\n  letter-spacing:.08em;\n  text-transform:uppercase;\n  color:var(--ra-muted);\n  margin-bottom:0.45rem;\n}\n\n.ra-visual-text{\n  font-size:0.84rem;\n  color:var(--ra-text);\n  line-height:1.65;\n  min-width:0;\n}\n\n.ra-pain-box{\n  background:\n    radial-gradient(220px 140px at 100% 0%, rgba(251,113,133,.12), transparent 70%),\n    rgba(255,255,255,.04);\n  border:1px solid rgba(251,113,133,.18);\n  border-radius:16px;\n  padding:1rem;\n  box-sizing:border-box;\n  min-width:0;\n}\n\n.ra-pain-title{\n  font-size:0.72rem;\n  font-weight:800;\n  letter-spacing:.1em;\n  text-transform:uppercase;\n  color:rgba(255,255,255,.78);\n  margin-bottom:0.55rem;\n}\n\n.ra-pain-text{\n  font-size:0.92rem;\n  color:rgba(255,255,255,.92);\n  line-height:1.75;\n  min-width:0;\n}\n\n.ra-pain-text strong{\n  color:#fff;\n}\n\n.ra-reco-links{\n  display:flex;\n  flex-wrap:wrap;\n  gap:0.55rem;\n  margin-top:0.9rem;\n  min-width:0;\n}\n\n.ra-reco-link{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  padding:0.62rem 0.9rem;\n  border-radius:999px;\n  text-decoration:none;\n  font-size:0.76rem;\n  font-weight:700;\n  background:rgba(79,128,255,.14);\n  color:#fff !important;\n  border:1px solid rgba(79,128,255,.22);\n  transition:all .18s ease;\n  box-sizing:border-box;\n  max-width:100%;\n  min-width:0;\n}\n\n.ra-reco-link:hover{\n  transform:translateY(-1px);\n  background:rgba(79,128,255,.20);\n}\n\n.ra-action-box{\n  background:rgba(255,255,255,.04);\n  border:1px solid var(--ra-border);\n  border-radius:16px;\n  padding:1rem;\n  box-sizing:border-box;\n  min-width:0;\n}\n\n.ra-action-title{\n  font-size:0.72rem;\n  font-weight:800;\n  letter-spacing:.1em;\n  text-transform:uppercase;\n  color:rgba(255,255,255,.78);\n  margin-bottom:0.6rem;\n}\n\n.ra-action-main{\n  font-size:1rem;\n  color:#fff;\n  line-height:1.6;\n  margin-bottom:0.85rem;\n  font-weight:700;\n  min-width:0;\n}\n\n.ra-action-sub{\n  font-size:0.85rem;\n  color:var(--ra-muted);\n  line-height:1.7;\n  min-width:0;\n}\n\n\/* \u2500\u2500 BLOQUE CONVERSI\u00d3N \u2500\u2500 *\/\n.review-conversion-wrap{\n  margin:0 0 1rem 0;\n  font-family:inherit;\n  min-width:0;\n}\n\n.review-conversion-box{\n  position:relative;\n  background:#fff2c5;\n  border-radius:22px;\n  padding:34px;\n  border:1px solid #e6e8ef;\n  box-shadow:0 24px 60px rgba(0,0,0,0.12);\n  color:#111;\n  overflow:hidden;\n  box-sizing:border-box;\n  min-width:0;\n}\n\n.review-conversion-inner{\n  position:relative;\n  z-index:1;\n  min-width:0;\n}\n\n.review-conversion-kicker{\n  display:inline-flex;\n  align-items:center;\n  gap:8px;\n  padding:8px 12px;\n  border-radius:999px;\n  background:#ffd851;\n  border:1px solid #e3e7ff;\n  color:#614401;\n  font-size:12px;\n  font-weight:700;\n  letter-spacing:.04em;\n  text-transform:uppercase;\n  margin-bottom:16px;\n  max-width:100%;\n  box-sizing:border-box;\n}\n\n.review-conversion-title{\n  font-size:30px;\n  line-height:1.1;\n  font-weight:800;\n  margin-bottom:10px;\n  max-width:760px;\n  color:#111;\n}\n\n.review-conversion-lead{\n  font-size:18px;\n  line-height:1.35;\n  font-weight:600;\n  margin-bottom:12px;\n  color:#1b1b1b;\n  max-width:820px;\n}\n\n.review-conversion-text{\n  font-size:15px;\n  line-height:1.6;\n  color:#555;\n  margin-bottom:24px;\n  max-width:820px;\n}\n\n.review-benefits{\n  display:grid;\n  grid-template-columns:repeat(auto-fit,minmax(260px,1fr));\n  gap:12px 22px;\n  margin-bottom:26px;\n  min-width:0;\n}\n\n.review-benefit{\n  font-size:14px;\n  color:#222;\n  padding:10px 12px;\n  border-radius:12px;\n  background:#f7f8fc;\n  border:1px solid #eef0f6;\n  box-sizing:border-box;\n  min-width:0;\n}\n\n.review-cta-row{\n  display:flex;\n  gap:14px;\n  flex-wrap:wrap;\n  align-items:center;\n  min-width:0;\n}\n\n.review-btn-primary{\n  background:linear-gradient(90deg, #0841bf, #3160c9);\n  color:#fff !important;\n  padding:14px 22px;\n  border-radius:12px;\n  text-decoration:none;\n  font-weight:700;\n  font-size:15px;\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  box-shadow:0 10px 24px rgba(79,128,255,0.25);\n  transition:transform .15s ease, box-shadow .15s ease;\n  box-sizing:border-box;\n  max-width:100%;\n  min-width:0;\n}\n\n.review-btn-primary:hover{\n  transform:translateY(-1px);\n  box-shadow:0 14px 30px rgba(79,128,255,0.30);\n}\n\n.review-btn-secondary{\n  color:#2f3fa8 !important;\n  text-decoration:none;\n  font-weight:600;\n  font-size:14px;\n  padding:14px 18px;\n  border-radius:12px;\n  background:#f1f4ff;\n  border:1px solid #e3e7ff;\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  box-sizing:border-box;\n  max-width:100%;\n  min-width:0;\n}\n\n.review-btn-secondary:hover{\n  background:#e8edff;\n}\n\n.review-note{\n  margin-top:14px;\n  font-size:13px;\n  color:#666;\n}\n\n\/* CLIENTES *\/\n.review-clients-box{\n  margin-top:20px;\n  background:#fff2c5;\n  border:1px solid #f1d196;\n  border-radius:18px;\n  padding:18px 0;\n  overflow:hidden;\n  box-sizing:border-box;\n  min-width:0;\n}\n\n.review-clients-label{\n  padding:0 20px 12px 20px;\n  font-size:12px;\n  font-weight:700;\n  letter-spacing:.04em;\n  text-transform:uppercase;\n  color:#555;\n}\n\n.review-logo-marquee{\n  position:relative;\n  overflow:hidden;\n  width:100%;\n}\n\n.review-logo-track{\n  display:flex;\n  width:max-content;\n  animation:reviewLogosMove 34s linear infinite;\n}\n\n.review-logo-marquee:hover .review-logo-track{\n  animation-play-state:paused;\n}\n\n.review-logo-item{\n  flex:0 0 auto;\n  width:160px;\n  height:74px;\n  margin-right:18px;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  padding:14px 18px;\n  border-radius:14px;\n  background:#ffffff;\n  border:1px solid #eceef5;\n  box-sizing:border-box;\n}\n\n.review-logo-item img{\n  max-width:100%;\n  max-height:36px;\n  width:auto;\n  height:auto;\n  object-fit:contain;\n}\n\n@keyframes reviewLogosMove{\n  from{ transform:translateX(0); }\n  to{ transform:translateX(-50%); }\n}\n\n\/* \u2500\u2500 BTN RESET \u2500\u2500 *\/\n.ra-tools-row{\n  display:flex;\n  gap:0.6rem;\n  flex-wrap:wrap;\n  margin-top:1rem;\n  min-width:0;\n}\n\n.ra-btn-reset{\n  display:inline-flex;\n  align-items:center;\n  gap:0.5rem;\n  padding:0.62rem 1.15rem;\n  background:rgba(255,255,255,.03);\n  color:var(--ra-muted);\n  border:1px solid var(--ra-border);\n  border-radius:14px;\n  font-family:inherit;\n  font-size:0.78rem;\n  font-weight:700;\n  cursor:pointer;\n  transition:all .18s ease;\n  margin-top:1rem;\n  box-sizing:border-box;\n}\n\n.ra-btn-reset:hover{\n  border-color:var(--ra-border2);\n  color:rgba(255,255,255,.9);\n  background:rgba(255,255,255,.05);\n}\n\n\/* \u2500\u2500 AJUSTE M\u00d3VIL DESBORDE \u2500\u2500 *\/\n.ra-wrap,\n.ra-results,\n.ra-results-grid,\n.ra-score-card,\n.ra-score-left,\n.ra-score-side,\n.ra-card,\n.ra-side-kpi,\n.ra-metric-box,\n.ra-visual-item,\n.ra-action-box,\n.ra-pain-box,\n.ra-topic-row,\n.ra-stars-wrap,\n.ra-reco-links{\n  min-width:0;\n}\n\n\/* \u2500\u2500 RESPONSIVE \u2500\u2500 *\/\n@media (max-width:980px){\n  .ra-score-card{\n    grid-template-columns:1fr;\n  }\n}\n\n@media (max-width:900px){\n  .ra-metrics-grid,\n  .ra-visual-split,\n  .ra-score-side{\n    grid-template-columns:1fr;\n  }\n\n  .ra-side-kpi{\n    min-height:auto;\n  }\n}\n\n@media (max-width:640px){\n  .review-conversion-box{\n    padding:24px;\n    border-radius:18px;\n  }\n\n  .review-conversion-title{\n    font-size:24px;\n  }\n\n  .review-conversion-lead{\n    font-size:16px;\n  }\n\n  .review-benefits{\n    grid-template-columns:1fr;\n  }\n\n  .review-logo-item{\n    width:138px;\n    height:68px;\n  }\n}\n\n@media (max-width:580px){\n  .ra-results-grid{\n    grid-template-columns:1fr;\n  }\n\n  .ra-card{\n    padding:1rem;\n  }\n\n  .ra-score-card{\n    grid-template-columns:1fr;\n    padding:1rem;\n  }\n\n  .ra-score-left,\n  .ra-score-side{\n    min-width:0;\n  }\n\n  .ra-score-num{\n    font-size:3.5rem;\n  }\n\n  .ra-topic-name{\n    width:86px;\n  }\n\n  .ra-stars-wrap{\n    flex-direction:column;\n    align-items:flex-start;\n  }\n\n  .ra-posneg-row{\n    flex-direction:column;\n  }\n\n  .ra-reco-link{\n    width:100%;\n  }\n}\n\n@media (max-width:480px){\n  .ra-popup-box{ border-radius:16px; max-height:95vh; }\n  .ra-popup-head{ padding:1.4rem 1.25rem 1rem; }\n  .ra-popup-form-wrap{ padding:0; }\n  .ra-thinking-box{ border-radius:16px; padding:1.6rem 1.2rem; }\n}\n\n@media (max-width:400px){\n  .ra-input-card,\n  .ra-card,\n  .ra-score-card,\n  .review-conversion-box{\n    padding:0.9rem;\n    border-radius:16px;\n  }\n\n  .ra-side-kpi-value,\n  .ra-metric-value{\n    font-size:1.7rem;\n  }\n\n  .ra-score-num{\n    font-size:3.1rem;\n  }\n\n  .ra-card-label{\n    font-size:1rem !important;\n  }\n\n  .ra-ai-chip{\n    font-size:0.62rem;\n    padding:5px 8px;\n  }\n\n  .review-btn-primary,\n  .review-btn-secondary,\n  .ra-btn-analyze,\n  .ra-btn-clear{\n    width:100%;\n  }\n}\n\n\/* \u2500\u2500 POPUP ZOHO \u2500\u2500 *\/\n.ra-popup-overlay{\n  display:none;\n  position:fixed;\n  inset:0;\n  background:rgba(0,0,0,.62);\n  backdrop-filter:blur(10px);\n  -webkit-backdrop-filter:blur(10px);\n  z-index:99999;\n  align-items:center;\n  justify-content:center;\n  padding:1.5rem;\n}\n\n.ra-popup-overlay.open{\n  display:flex;\n  animation:ra-overlayIn .25s ease;\n}\n\n@keyframes ra-overlayIn{\n  from{ opacity:0; }\n  to{ opacity:1; }\n}\n\n.ra-popup-box{\n  background:rgba(255,255,255,.06);\n  border:1px solid rgba(255,255,255,.12);\n  border-radius:20px;\n  box-shadow:0 28px 78px rgba(0,0,0,.55);\n  width:100%;\n  max-width:760px;\n  max-height:95vh;\n  overflow-y:auto;\n  overflow-x:hidden;\n  position:relative;\n  animation:ra-boxIn .28s cubic-bezier(.34,1.56,.64,1);\n  backdrop-filter:blur(14px);\n  -webkit-backdrop-filter:blur(14px);\n  box-sizing:border-box;\n}\n\n@keyframes ra-boxIn{\n  from{ opacity:0; transform:scale(.96) translateY(12px); }\n  to{ opacity:1; transform:scale(1) translateY(0); }\n}\n\n.ra-popup-close{\n  position:absolute;\n  top:1rem;\n  right:1rem;\n  width:34px;\n  height:34px;\n  border-radius:50%;\n  border:1px solid rgba(255,255,255,.14) !important;\n  background:rgba(255,255,255,.06) !important;\n  color:rgba(255,255,255,.78) !important;\n  display:flex !important;\n  align-items:center;\n  justify-content:center;\n  cursor:pointer;\n  transition:all .15s ease !important;\n  z-index:2;\n  padding:0 !important;\n}\n\n.ra-popup-close:hover{\n  background:rgba(255,255,255,.10) !important;\n  color:rgba(255,255,255,.92) !important;\n  border-color:rgba(255,255,255,.20) !important;\n}\n\n.ra-popup-head{\n  display:flex;\n  align-items:flex-start;\n  gap:1rem;\n  padding:1.75rem 1.75rem 1.25rem;\n  border-bottom:1px solid rgba(255,255,255,.10);\n  min-width:0;\n}\n\n.ra-popup-icon{\n  width:48px;\n  height:48px;\n  border-radius:14px;\n  background:\n    radial-gradient(80% 80% at 30% 20%, rgba(139,92,246,.34), transparent 70%),\n    rgba(79,128,255,.14);\n  color:rgba(255,255,255,.92);\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  flex-shrink:0;\n  border:1px solid rgba(79,128,255,.22);\n  box-shadow:0 0 0 8px rgba(79,128,255,.06);\n}\n\n.ra-popup-title{\n  font-size:1rem;\n  font-weight:800;\n  color:rgba(255,255,255,.92);\n  line-height:1.3;\n  margin-bottom:0.3rem;\n}\n\n.ra-popup-subtitle{\n  font-size:0.82rem;\n  color:rgba(255,255,255,.68);\n  line-height:1.6;\n}\n\n.ra-popup-form-wrap{ padding:0.5rem 0.25rem 0.25rem; }\n\n#ra-zoho-iframe{\n  background:transparent;\n  border-radius:16px;\n}\n\n.ra-popup-form-wrap iframe{\n  border:1px solid rgba(255,255,255,.10) !important;\n}\n\n\/* \u2500\u2500 POPUP ANALIZANDO \u2500\u2500 *\/\n.ra-thinking-overlay{\n  display:none;\n  position:fixed;\n  inset:0;\n  background:\n    radial-gradient(420px 240px at 50% 22%, rgba(79,128,255,.18), transparent 68%),\n    rgba(0,0,0,.72);\n  backdrop-filter:blur(10px);\n  -webkit-backdrop-filter:blur(10px);\n  z-index:100000;\n  align-items:center;\n  justify-content:center;\n  padding:1.5rem;\n}\n\n.ra-thinking-overlay.open{\n  display:flex;\n  animation:ra-overlayIn .25s ease;\n}\n\n.ra-thinking-box{\n  width:100%;\n  max-width:460px;\n  background:\n    radial-gradient(220px 140px at 10% 0%, rgba(139,92,246,.18), transparent 70%),\n    radial-gradient(220px 140px at 100% 100%, rgba(34,211,238,.12), transparent 70%),\n    rgba(255,255,255,.07);\n  border:1px solid rgba(255,255,255,.12);\n  border-radius:22px;\n  box-shadow:0 28px 78px rgba(0,0,0,.55);\n  padding:2rem 1.5rem;\n  text-align:center;\n  backdrop-filter:blur(14px);\n  -webkit-backdrop-filter:blur(14px);\n  animation:ra-boxIn .28s cubic-bezier(.34,1.56,.64,1);\n  position:relative;\n  overflow:hidden;\n  box-sizing:border-box;\n}\n\n.ra-thinking-ai-chip{\n  display:inline-flex;\n  align-items:center;\n  gap:7px;\n  padding:7px 12px;\n  border-radius:999px;\n  background:rgba(139,92,246,.18);\n  border:1px solid rgba(139,92,246,.28);\n  color:#fff;\n  font-size:0.72rem;\n  font-weight:800;\n  letter-spacing:.08em;\n  text-transform:uppercase;\n  margin-bottom:0.95rem;\n  max-width:100%;\n  box-sizing:border-box;\n}\n\n.ra-thinking-orbit{\n  position:relative;\n  width:88px;\n  height:88px;\n  margin:0 auto 1rem;\n}\n\n.ra-thinking-core{\n  position:absolute;\n  inset:18px;\n  border-radius:50%;\n  background:linear-gradient(180deg, rgba(79,128,255,.95), rgba(139,92,246,.95));\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  color:#fff;\n  box-shadow:0 0 22px rgba(79,128,255,.28);\n}\n\n.ra-thinking-ring{\n  position:absolute;\n  inset:0;\n  border-radius:50%;\n  border:1px dashed rgba(255,255,255,.18);\n  animation:raSpin 10s linear infinite;\n}\n\n.ra-thinking-dot{\n  position:absolute;\n  top:6px;\n  left:50%;\n  width:10px;\n  height:10px;\n  margin-left:-5px;\n  border-radius:50%;\n  background:#8b5cf6;\n  box-shadow:0 0 12px rgba(139,92,246,.45);\n}\n\n.ra-thinking-ring.two{\n  inset:10px;\n  animation-direction:reverse;\n  animation-duration:6s;\n  border-style:solid;\n  border-color:rgba(34,211,238,.14);\n}\n\n@keyframes raSpin{\n  from{ transform:rotate(0deg); }\n  to{ transform:rotate(360deg); }\n}\n\n.ra-thinking-title{\n  font-size:1.15rem;\n  font-weight:800;\n  color:rgba(255,255,255,.94);\n  margin-bottom:0.45rem;\n}\n\n.ra-thinking-text{\n  font-size:0.88rem;\n  line-height:1.6;\n  color:rgba(255,255,255,.68);\n  margin-bottom:1rem;\n}\n\n.ra-thinking-countdown{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  gap:0.45rem;\n  min-width:120px;\n  padding:0.65rem 1rem;\n  border-radius:999px;\n  background:rgba(79,128,255,.14);\n  border:1px solid rgba(79,128,255,.24);\n  color:#fff;\n  font-weight:800;\n  font-size:1rem;\n  box-sizing:border-box;\n  max-width:100%;\n}\n\n#ra-thinking-seconds{\n  display:inline-block;\n  min-width:16px;\n  text-align:center;\n}\n<\/style>\n\n<div class=\"ra-wrap\">\n\n  <div class=\"ra-input-card\">\n    <div class=\"ra-input-head\">\n      <div class=\"ra-input-head-badge\">\n        <svg width=\"13\" height=\"13\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3l1.9 4.6L18 9.5l-4.1 1.9L12 16l-1.9-4.6L6 9.5l4.1-1.9L12 3z\"><\/path><\/svg>\n        analyse ia des avis\n      <\/div>\n      <div class=\"ra-input-head-text\">\n        Analysez le sentiment, les th\u00e8mes r\u00e9currents, les risques et les opportunit\u00e9s \u00e0 partir d'avis coll\u00e9s depuis Google, Trustpilot, Tripadvisor ou d'autres plateformes.\n      <\/div>\n    <\/div>\n\n    <div class=\"ra-format-selector\">\n      <div class=\"ra-input-label\" style=\"margin-bottom:0.5rem\"><span><\/span> Source des avis<\/div>\n      <div class=\"ra-fmt-btns\">\n        <button class=\"ra-fmt-btn active\" data-fmt=\"auto\" type=\"button\">Auto<\/button>\n        <button class=\"ra-fmt-btn\" data-fmt=\"google\" type=\"button\">Google Maps<\/button>\n        <button class=\"ra-fmt-btn\" data-fmt=\"trustpilot\" type=\"button\">Trustpilot<\/button>\n        <button class=\"ra-fmt-btn\" data-fmt=\"plain\" type=\"button\">Texte libre<\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"ra-input-label\" style=\"margin-top:1.2rem\"><span><\/span> Collez ici vos avis<\/div>\n    <textarea id=\"rv-input\" placeholder=\"Collez un ou plusieurs avis copi\u00e9s directement depuis Google Maps, Trustpilot, Tripadvisor ou d'autres plateformes.\"><\/textarea>\n\n    <div class=\"ra-input-footer\">\n      <span class=\"ra-char-count\" id=\"rv-chars\">0 caract\u00e8res \u00b7 0 avis d\u00e9tect\u00e9s<\/span>\n      <span class=\"ra-hint-text\">Ctrl+Entr\u00e9e pour analyser<\/span>\n    <\/div>\n\n    <div class=\"ra-actions\">\n      <button class=\"ra-btn-analyze\" id=\"rv-btn\" type=\"button\">\n        <svg width=\"15\" height=\"15\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"\/><\/svg>\n        Analyser les avis\n      <\/button>\n\n      <button class=\"ra-btn-clear\" id=\"rv-clear\" type=\"button\">\n        Effacer\n      <\/button>\n    <\/div>\n  <\/div>\n\n  <div class=\"ra-results\" id=\"rv-results\">\n    <div class=\"ra-results-grid\">\n\n      <div class=\"ra-card ra-score-card ai\" id=\"rv-score-card\">\n        <div class=\"ra-score-left\">\n          <div>\n            <div class=\"ra-card-label\">\n              <span>Sentiment g\u00e9n\u00e9ral<\/span>\n              <span class=\"ra-ai-chip\">\n                <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3l1.9 4.6L18 9.5l-4.1 1.9L12 16l-1.9-4.6L6 9.5l4.1-1.9L12 3z\"><\/path><\/svg>\n                analyse ia\n              <\/span>\n            <\/div>\n\n            <div class=\"ra-score-main\">\n              <span class=\"ra-score-num\" id=\"rv-score-num\">\u2014<\/span>\n              <span class=\"ra-score-denom\">\/10<\/span>\n            <\/div>\n\n            <div class=\"ra-score-bar-wrap\" style=\"margin-top:0.7rem;\">\n              <div class=\"ra-score-bar-track\">\n                <div class=\"ra-score-bar-fill\" id=\"rv-score-bar\"><\/div>\n              <\/div>\n              <div class=\"ra-score-verdict\" id=\"rv-score-verdict\">\u2014<\/div>\n            <\/div>\n\n            <div class=\"ra-stars-wrap\">\n              <div class=\"ra-stars\" id=\"rv-stars\">\n                <span class=\"star\">\u2605<\/span>\n                <span class=\"star\">\u2605<\/span>\n                <span class=\"star\">\u2605<\/span>\n                <span class=\"star\">\u2605<\/span>\n                <span class=\"star\">\u2605<\/span>\n              <\/div>\n              <div class=\"ra-stars-meta\">\n                Note estim\u00e9e visible sur les plateformes <strong id=\"rv-rating-est-inline\">\u2014<\/strong>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"ra-pain-box\">\n            <div class=\"ra-pain-title\">Lecture rapide<\/div>\n            <div class=\"ra-pain-text\" id=\"rv-score-fast-read\">\u2014<\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"ra-score-side\">\n          <div class=\"ra-side-kpi\">\n            <div>\n              <div class=\"ra-side-kpi-label\">Satisfaction<\/div>\n              <div class=\"ra-side-kpi-value\" id=\"rv-satisfaction-inline\">\u2014<\/div>\n              <div class=\"ra-side-kpi-text\">Lecture g\u00e9n\u00e9rale de la satisfaction per\u00e7ue.<\/div>\n            <\/div>\n            <div class=\"ra-side-kpi-visual\">\n              <div class=\"ra-mini-stars\" id=\"rv-mini-stars\">\n                <span class=\"star\">\u2605<\/span><span class=\"star\">\u2605<\/span><span class=\"star\">\u2605<\/span><span class=\"star\">\u2605<\/span><span class=\"star\">\u2605<\/span>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"ra-side-kpi\">\n            <div>\n              <div class=\"ra-side-kpi-label\">Risque<\/div>\n              <div class=\"ra-side-kpi-value\" id=\"rv-risk-inline\">\u2014<\/div>\n              <div class=\"ra-side-kpi-text\">Poids des avis n\u00e9gatifs sur le total analys\u00e9.<\/div>\n            <\/div>\n            <div class=\"ra-side-kpi-visual\">\n              <div class=\"ra-mini-bar\">\n                <div class=\"ra-mini-bar-fill red\" id=\"rv-mini-risk-bar\"><\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"ra-side-kpi\">\n            <div>\n              <div class=\"ra-side-kpi-label\">Intensit\u00e9<\/div>\n              <div class=\"ra-side-kpi-value\" id=\"rv-intensity-inline\">\u2014<\/div>\n              <div class=\"ra-side-kpi-text\">Charge \u00e9motionnelle d\u00e9tect\u00e9e dans les opinions.<\/div>\n            <\/div>\n            <div class=\"ra-side-kpi-visual\">\n              <div class=\"ra-mini-pill low\" id=\"rv-intensity-pill\">\n                <span class=\"dot\"><\/span>\n                <span id=\"rv-intensity-pill-text\">\u2014<\/span>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card glass-light\">\n        <div class=\"ra-card-label\">R\u00e9partition<\/div>\n        <div class=\"ra-posneg-row\">\n          <div class=\"ra-posneg-pill pos\">\n            <div class=\"ra-pill-num pos\" id=\"rv-pos-n\">0<\/div>\n            <div class=\"ra-pill-label\">Positifs<\/div>\n          <\/div>\n          <div class=\"ra-posneg-pill neu\">\n            <div class=\"ra-pill-num neu\" id=\"rv-neu-n\">0<\/div>\n            <div class=\"ra-pill-label\">Neutres<\/div>\n          <\/div>\n          <div class=\"ra-posneg-pill neg\">\n            <div class=\"ra-pill-num neg\" id=\"rv-neg-n\">0<\/div>\n            <div class=\"ra-pill-label\">N\u00e9gatifs<\/div>\n          <\/div>\n        <\/div>\n        <div class=\"ra-ratio-bar\">\n          <div class=\"ra-ratio-bar-pos\" id=\"rv-bar-pos\" style=\"width:0%\"><\/div>\n          <div style=\"background:var(--ra-amber);height:100%;border-radius:999px;transition:width 1s ease;width:0%\" id=\"rv-bar-neu\"><\/div>\n          <div class=\"ra-ratio-bar-neg\" id=\"rv-bar-neg\" style=\"width:0%\"><\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card highlight\">\n        <div class=\"ra-card-label\">Indicateurs commerciaux<\/div>\n        <div class=\"ra-metrics-grid\">\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Note estim\u00e9e<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-rating-est\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Lecture estim\u00e9e sur 5 \u00e0 partir du sentiment d\u00e9tect\u00e9.<\/div>\n          <\/div>\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Satisfaction<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-satisfaction\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Estimation g\u00e9n\u00e9rale de la satisfaction des clients.<\/div>\n          <\/div>\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Longueur moyenne<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-avg-words\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Moyenne de mots par avis analys\u00e9.<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card soft\">\n        <div class=\"ra-card-label\">Lecture du ton<\/div>\n        <div id=\"rv-urgency-chip\" class=\"ra-status-chip mid\">\u2014<\/div>\n        <div class=\"ra-metrics-grid\" style=\"grid-template-columns:repeat(2,1fr);\">\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Risque r\u00e9putationnel<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-risk\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Volume d'avis n\u00e9gatifs par rapport au total analys\u00e9.<\/div>\n          <\/div>\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Intensit\u00e9 \u00e9motionnelle<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-intensity\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Niveau de col\u00e8re, de tension ou d'enthousiasme dans les avis.<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card glass-light\">\n        <div class=\"ra-card-label\">Th\u00e8mes les plus mentionn\u00e9s<\/div>\n        <div class=\"ra-topics-list\" id=\"rv-topics\"><\/div>\n      <\/div>\n\n      <div class=\"ra-card\">\n        <div class=\"ra-card-label\">Mots-cl\u00e9s d\u00e9tect\u00e9s<\/div>\n        <div class=\"ra-kw-cloud\" id=\"rv-kw-cloud\"><\/div>\n      <\/div>\n\n      <div class=\"ra-card highlight\">\n        <div class=\"ra-card-label\">Probl\u00e8mes d\u00e9tect\u00e9s<\/div>\n        <ul class=\"ra-bullets\" id=\"rv-problems\"><\/ul>\n      <\/div>\n\n      <div class=\"ra-card soft\">\n        <div class=\"ra-card-label\">Points forts d\u00e9tect\u00e9s<\/div>\n        <ul class=\"ra-bullets\" id=\"rv-strengths\"><\/ul>\n      <\/div>\n\n      <div class=\"ra-card ai\">\n        <div class=\"ra-card-label\">\n          <span>Risque commercial<\/span>\n          <span class=\"ra-ai-chip\">\n            <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3l1.9 4.6L18 9.5l-4.1 1.9L12 16l-1.9-4.6L6 9.5l4.1-1.9L12 3z\"><\/path><\/svg>\n            lecture ia\n          <\/span>\n        <\/div>\n        <div class=\"ra-pain-box\">\n          <div class=\"ra-pain-title\">Ce qui peut se passer<\/div>\n          <div class=\"ra-pain-text\" id=\"rv-commercial-risk\">\u2014<\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card glass-light\">\n        <div class=\"ra-card-label\">Sch\u00e9ma d\u00e9tect\u00e9<\/div>\n        <div class=\"ra-action-box\">\n          <div class=\"ra-action-title\">Signal dominant<\/div>\n          <div class=\"ra-action-main\" id=\"rv-pattern-main\">\u2014<\/div>\n          <div class=\"ra-action-sub\" id=\"rv-pattern-sub\">\u2014<\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card highlight\">\n        <div class=\"ra-card-label\">Premi\u00e8re action recommand\u00e9e<\/div>\n        <div class=\"ra-action-box\">\n          <div class=\"ra-action-title\">Ce que je ferais maintenant<\/div>\n          <div class=\"ra-action-main\" id=\"rv-action-main\">\u2014<\/div>\n          <div class=\"ra-action-sub\" id=\"rv-action-sub\">\u2014<\/div>\n          <div class=\"ra-reco-links\" id=\"rv-action-links\"><\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card\">\n        <div class=\"ra-card-label\">\u00c9tapes suivantes<\/div>\n        <ul class=\"ra-bullets\" id=\"rv-actions\"><\/ul>\n      <\/div>\n\n      <div class=\"ra-card ra-summary-card glass-light\">\n        <div class=\"ra-card-label\">Impact sur la r\u00e9putation et la visibilit\u00e9<\/div>\n        <div class=\"ra-visual-split\" id=\"rv-visibility-grid\">\n          <div class=\"ra-visual-item\">\n            <div class=\"ra-visual-title\">Perception du client<\/div>\n            <div class=\"ra-visual-text\" id=\"rv-visibility-perception\">\u2014<\/div>\n          <\/div>\n          <div class=\"ra-visual-item\">\n            <div class=\"ra-visual-title\">Visibilit\u00e9 sur les plateformes<\/div>\n            <div class=\"ra-visual-text\" id=\"rv-visibility-platforms\">\u2014<\/div>\n          <\/div>\n          <div class=\"ra-visual-item\">\n            <div class=\"ra-visual-title\">Acquisition de nouveaux avis<\/div>\n            <div class=\"ra-visual-text\" id=\"rv-visibility-acquisition\">\u2014<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card ra-summary-card\">\n        <div class=\"ra-card-label\">R\u00e9sum\u00e9 ex\u00e9cutif<\/div>\n        <div class=\"ra-summary-text\" id=\"rv-summary\">\u2014<\/div>\n      <\/div>\n\n    <\/div>\n\n    <!-- BLOQUE CONVERSI\u00d3N SOFTWARE RESE\u00d1AS -->\n    <div class=\"review-conversion-wrap\">\n      <div class=\"review-conversion-box\">\n        <div class=\"review-conversion-inner\">\n\n          <div class=\"review-conversion-kicker\">\n            am\u00e9liorez votre r\u00e9putation\n          <\/div>\n\n          <div class=\"review-conversion-title\">\n            Cette analyse n'est que le d\u00e9but\n          <\/div>\n\n          <div class=\"review-conversion-lead\">\n            D\u00e9tectez les probl\u00e8mes dans vos avis, r\u00e9pondez avec l'IA et am\u00e9liorez votre note sans perdre des heures \u00e0 lire des opinions.\n          <\/div>\n\n          <div class=\"review-conversion-text\">\n            Vous avez d\u00e9j\u00e0 vu un aper\u00e7u de la fa\u00e7on dont vos clients vous per\u00e7oivent. Avec le logiciel de gestion des avis de Repscan, vous pouvez analyser tous vos avis automatiquement, centraliser les profils, r\u00e9pondre aux opinions avec l'IA, r\u00e9sumer des milliers de commentaires en quelques secondes, les regrouper par th\u00e8mes et prot\u00e9ger votre note.\n          <\/div>\n\n          <div class=\"review-benefits\">\n            <div class=\"review-benefit\">\u2713 Tableau de bord unique avec Google, Trustpilot et d'autres plateformes<\/div>\n            <div class=\"review-benefit\">\u2713 R\u00e9ponses massives aux avis avec l'IA<\/div>\n            <div class=\"review-benefit\">\u2713 R\u00e9sum\u00e9 automatique de milliers d'opinions avec l'IA<\/div>\n            <div class=\"review-benefit\">\u2713 Suppression de faux avis depuis la plateforme<\/div>\n            <div class=\"review-benefit\">\u2713 \u00c9tiquettes pour regrouper les avis par th\u00e8mes<\/div>\n            <div class=\"review-benefit\">\u2713 Carte NFC gratuite pour augmenter vos avis<\/div>\n            <div class=\"review-benefit\">\u2713 Am\u00e9liorez votre SEO local<\/div>\n          <\/div>\n\n          <div class=\"review-cta-row\">\n            <a class=\"review-btn-primary\" href=\"https:\/\/www.repscan.com\/fr\/plateforme-de-gestion-des-avis\/\">Voir plus de d\u00e9tails du logiciel \u2192<\/a>\n            <a class=\"review-btn-secondary\" href=\"https:\/\/www.repscan.com\/fr\/formulaire-de-contact\/\">R\u00e9server une d\u00e9mo (10 min.)<\/a>\n          <\/div>\n\n          <div class=\"review-note\">\n            Plus de 1 200 entreprises g\u00e8rent d\u00e9j\u00e0 leurs avis avec Repscan.\n          <\/div>\n\n          <div class=\"review-clients-box\">\n            <div class=\"review-clients-label\">Quelques marques et entit\u00e9s qui travaillent d\u00e9j\u00e0 avec Repscan<\/div>\n            <div class=\"review-logo-marquee\">\n              <div class=\"review-logo-track\">\n\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/04\/logo-asociacion-violencia-digital.png\" alt=\"Asociaci\u00f3n Violencia Digital\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/04\/logo-federacio-catalana-de-futbol.png\" alt=\"Federaci\u00f3 Catalana de Futbol\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2026\/02\/barcelona-activa_logo.png\" alt=\"Barcelona Activa\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/11\/norauto.png\" alt=\"Norauto\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/05\/diect-seguros.png\" alt=\"Diect Seguros\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/11\/maestro-pizza-1-1.png\" alt=\"Maestro Pizza\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/04\/logo-betis-1.png\" alt=\"Betis\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2026\/02\/logo-acceso.png\" alt=\"Acceso\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/05\/llorente-y-cuenca.png\" alt=\"Llorente y Cuenca\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/05\/net-craman.png\" alt=\"Net Craman\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/11\/grupo-sagardi.png\" alt=\"Grupo Sagardi\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/11\/grupo-san-telmo.png\" alt=\"Grupo San Telmo\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/11\/tablao-flamenco-cordobes-barcelona.png\" alt=\"Tablao Flamenco Cordobes Barcelona\"><\/div>\n\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/04\/logo-asociacion-violencia-digital.png\" alt=\"Asociaci\u00f3n Violencia Digital\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/04\/logo-federacio-catalana-de-futbol.png\" alt=\"Federaci\u00f3 Catalana de Futbol\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2026\/02\/barcelona-activa_logo.png\" alt=\"Barcelona Activa\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/11\/norauto.png\" alt=\"Norauto\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/05\/diect-seguros.png\" alt=\"Diect Seguros\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/11\/maestro-pizza-1-1.png\" alt=\"Maestro Pizza\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/04\/logo-betis-1.png\" alt=\"Betis\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2026\/02\/logo-acceso.png\" alt=\"Acceso\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/05\/llorente-y-cuenca.png\" alt=\"Llorente y Cuenca\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/05\/net-craman.png\" alt=\"Net Craman\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/11\/grupo-sagardi.png\" alt=\"Grupo Sagardi\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/11\/grupo-san-telmo.png\" alt=\"Grupo San Telmo\"><\/div>\n                <div class=\"review-logo-item\"><img decoding=\"async\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/11\/tablao-flamenco-cordobes-barcelona.png\" alt=\"Tablao Flamenco Cordobes Barcelona\"><\/div>\n\n              <\/div>\n            <\/div>\n          <\/div>\n\n        <\/div>\n      <\/div>\n    <\/div>\n    <!-- FIN BLOQUE CONVERSI\u00d3N SOFTWARE RESE\u00d1AS -->\n\n    <div class=\"ra-tools-row\">\n      <button class=\"ra-btn-reset\" id=\"rv-reset\" type=\"button\">\n        <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\"><polyline points=\"1 4 1 10 7 10\"\/><path d=\"M3.51 15a9 9 0 1 0 .49-3.84\"\/><\/svg>\n        Nouvelle analyse\n      <\/button>\n    <\/div>\n  <\/div>\n\n<\/div>\n\n<!-- POPUP ZOHO FORMS -->\n<div class=\"ra-popup-overlay\" id=\"ra-popup-overlay\">\n  <div class=\"ra-popup-box\">\n    <button class=\"ra-popup-close\" id=\"ra-popup-close\" aria-label=\"Fermer\" type=\"button\">\n      <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"\/><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"\/><\/svg>\n    <\/button>\n    <div class=\"ra-popup-head\">\n      <div class=\"ra-popup-icon\">\n        <svg width=\"22\" height=\"22\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3l1.9 4.6L18 9.5l-4.1 1.9L12 16l-1.9-4.6L6 9.5l4.1-1.9L12 3z\"><\/path><path d=\"M5 20l1-2\"><\/path><path d=\"M19 20l-1-2\"><\/path><\/svg>\n      <\/div>\n      <div>\n        <div class=\"ra-popup-title\">Saisissez votre e-mail pour voir les r\u00e9sultats<\/div>\n        <div class=\"ra-popup-subtitle\">En fermant cette fen\u00eatre, vous pourrez voir le r\u00e9sultat \u00e0 l'\u00e9cran.<\/div>\n      <\/div>\n    <\/div>\n    <div class=\"ra-popup-form-wrap\">\n      <iframe\n        id=\"ra-zoho-iframe\"\n        aria-label=\"ESP_ZOHO_FORM_ANALIZADOR-RESE\u00d1AS\"\n        frameborder=\"0\"\n        style=\"height:512px;width:100%;border:none;display:block;\"\n        src=\"https:\/\/forms.zohopublic.eu\/repscan\/form\/ESPZOHOFORMANALIZADORRESEAS\/formperma\/qGr0WukXeJUQvbPwtarPP02xQxci0L-3QdAeuD1PXLU\">\n      <\/iframe>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- POPUP ANALIZANDO -->\n<div class=\"ra-thinking-overlay\" id=\"ra-thinking-overlay\" aria-hidden=\"true\">\n  <div class=\"ra-thinking-box\">\n    <div class=\"ra-thinking-ai-chip\">\n      <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3l1.9 4.6L18 9.5l-4.1 1.9L12 16l-1.9-4.6L6 9.5l4.1-1.9L12 3z\"><\/path><\/svg>\n      ia en analyse\n    <\/div>\n\n    <div class=\"ra-thinking-orbit\">\n      <div class=\"ra-thinking-ring\">\n        <span class=\"ra-thinking-dot\"><\/span>\n      <\/div>\n      <div class=\"ra-thinking-ring two\"><\/div>\n      <div class=\"ra-thinking-core\">\n        <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.1\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <path d=\"M12 3l1.9 4.6L18 9.5l-4.1 1.9L12 16l-1.9-4.6L6 9.5l4.1-1.9L12 3z\"><\/path>\n        <\/svg>\n      <\/div>\n    <\/div>\n\n    <div class=\"ra-thinking-title\">Analyse des avis en cours<\/div>\n    <div class=\"ra-thinking-text\">L'IA traite le sentiment, les sch\u00e9mas r\u00e9currents, les signaux de risque et les opportunit\u00e9s d'am\u00e9lioration.<\/div>\n    <div class=\"ra-thinking-countdown\">\n      <span id=\"ra-thinking-seconds\">7<\/span>s\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function() {\n\n  \/\/ ============================================================\n  \/\/ 1) Diccionarios ampliados\n  \/\/ ============================================================\n  var POS_WORDS = [\n    'excelente','perfecto','perfecta','increible','fantastico','fantastica','maravilloso','maravillosa','genial','espectacular','impecable',\n    'bien','muy bien','bueno','buena','buen','muy bueno','muy buena','muy buen','buenisimo','buenisima',\n    'recomendable','recomiendo','volveremos','volveria','para repetir',\n    'encantador','encantadora','encantadores','encantadoras','agradable','amable','amables','atento','atenta','atentos','atentas',\n    'eficiente','profesional','profesionales','rapido','rapida','rapidos','rapidas','calidad','top','de diez','10\/10','5\/5','cinco estrellas',\n    'aut\u00e9ntico','autentico','una joya','muy recomendable','me encanto','me encant\u00f3','trato excelente','trato impecable',\n    'contento','contenta','muy contento','muy contenta','contentisimo','contentisima','super contento','super contenta',\n    'todo perfecto','todo genial','todo muy bien','todo impecable','servicio excelente','muy profesionales',\n    'gran servicio','gran trato','gran atenci\u00f3n','atenci\u00f3n excelente','atenci\u00f3n impecable','muy atentos','muy atentas',\n    'buen servicio','muy buen servicio','buen trato','muy buen trato','buena atenci\u00f3n','muy buena atenci\u00f3n',\n    'muy amable','muy amables','excelente atenci\u00f3n','excelente servicio','buena relaci\u00f3n calidad precio',\n    'calidad precio','calidad-precio','merece la pena','vale la pena','repetiremos','repetire','repetiria',\n    'volver\u00e9','volveria seguro','volveremos seguro','sitio recomendable','sitio muy recomendable',\n    'muy satisfecho','muy satisfecha','satisfecho','satisfecha','encantado','encantada',\n    'muy rico','muy rica','delicioso','deliciosa','brutal','buen\u00edsimo','buen\u00edsima',\n    'todo correcto','muy correcto','sin problemas','ning\u00fan problema','ningun problema',\n    'resolvieron r\u00e1pido','solucionado enseguida','me ayudaron','me ayudaron mucho',\n    'trato cercano','trato profesional','gran trabajo',\n    '100% recomendable','recomendado','de confianza','serios','serias',\n    'muy limpio','muy limpia','limpio','limpia','puntual','puntuales','r\u00e1pidos','r\u00e1pidas',\n    'muy buen producto','muy buena calidad','muy buen precio',\n    'contento con la compra','contenta con la compra','muy contento con la compra','muy contenta con la compra',\n    'contento con el producto','contenta con el producto','muy contento con el producto','muy contenta con el producto',\n    'contento con el servicio','contenta con el servicio','muy contento con el servicio','muy contenta con el servicio',\n    'contento con el resultado','contenta con el resultado','muy contento con el resultado','muy contenta con el resultado',\n    'satisfecho con la compra','satisfecha con la compra','muy satisfecho con la compra','muy satisfecha con la compra',\n\n    'amazing','awesome','great','excellent','perfect','wonderful','fantastic','outstanding','recommend','recommended','best',\n    'good','very good','very nice','really good','super friendly','friendly staff','great service','great food',\n    'good service','very good service','good value','worth it','well done','very professional','quick response','fast service',\n    'highly recommend','totally recommend','five stars','loved it','love it','happy with the service',\n    'very satisfied','clean place','good quality','great attention','great experience','top notch','happy',\n\n    'eccellente','perfetto','perfetta','fantastico','fantastica','meraviglioso','meravigliosa','ottimo','ottima','consiglio','raccomando',\n    'molto bene','molto buono','molto buona','consigliatissimo','gentile','gentili','professionale',\n    'professionali','servizio eccellente','molto soddisfatto','molto soddisfatta','tornero','torneremo',\n    'buon servizio','molto buon servizio','bene',\n\n    'excelente','perfeito','perfeita','incrivel','fantastico','fantastica','maravilhoso','maravilhosa','otimo','otima','recomendo',\n    'muito bom','muito boa','muito bem','bom servico','muito bom servico','atendimento excelente',\n    'muito satisfeito','muito satisfeita','voltarei','vale a pena','servico excelente','profissionais','muito profissional',\n    'bem',\n\n    'excel\u00b7lent','perfecte','perfecta','increible','fantastic','fantastica','meravellos','meravellosa','genial',\n    'be','molt be','molt bo','molt bona','bo','bona','bon','recomano',\n    'molt recomanable','bon servei','molt bon servei','bona atenci\u00f3','molt bona atenci\u00f3',\n    'servei excel\u00b7lent','molt contents','molt contentes','molt satisfet','molt satisfeta',\n    'content','contenta','molt content','molt contenta',\n    'tracte excel\u00b7lent','molt amables','molt atent','molt atenta','molt professionals',\n    'hi tornarem','tornar\u00e9','val la pena','cap problema','tot perfecte','tot molt b\u00e9'\n  ];\n\n  var NEG_WORDS = [\n    'pesimo','pesima','terrible','horrible','fatal','desastre','penoso','penosa','inaceptable','deficiente','verg\u00fcenza','verguenza',\n    'decepcion','decepcionado','decepcionada','decepcionante','malo','mala','malos','malas','mal',\n    'muy malo','muy mala','muy mal','mal servicio','muy mal servicio','mal trato','muy mal trato',\n    'mala atenci\u00f3n','muy mala atenci\u00f3n','atenci\u00f3n p\u00e9sima','atencion pesima',\n    'caro','cara','sobreprecio','abusivo','abusiva','robo','estafa','estafadores','estafador','estafadora',\n    'ladron','ladrones','timadores','timador','timadora','sinverg\u00fcenza','sinverguenza','sinverg\u00fcenzas','sinverguenzas',\n    'lento','lenta','tarde','tardaron','espera','retraso','retrasos','demora','demoraron',\n    'frio','fria','frios','frias','seco','seca','quemado','quemada','salado','salada','crudo','cruda',\n    'no volvere','no volveria','no recomiendo','nunca mas','jam\u00e1s','jamas','una estrella','0\/10','peor',\n    'cucaracha','cucarachas','sucio','sucia','sucios','sucias','asqueroso','asquerosa','repugnante',\n    'mal educado','mal educada','bordes','borde','grosero','grosera','antipatico','antipatica',\n    'impresentable','impresentables','estafan','enga\u00f1an','engano','enga\u00f1o','enga\u00f1ado','enga\u00f1ada',\n    'mentira','mentirosos','mentiroso','mentirosa','chapuza','chapucero','chapucera',\n    'poca profesionalidad','nada profesional','informales','informal','desorganizado','desorganizada',\n    'p\u00e9simo servicio','pesimo servicio','trato horrible',\n    'servicio nefasto','nefasto','nefasta','cutre','lamentable','indignante','de pena',\n    'para denunciar','denunciable','no contestan','no responden','pasan de ti','me dejaron tirado',\n    'me dejaron tirada','me colgaron','me bloquearon','me ignoraron','no se hacen cargo',\n    'no se hicieron cargo','no solucionan nada','no solucionaron nada','sin soluci\u00f3n','sin solucion',\n    'mala calidad','baja calidad','carisimo','car\u00edsima','carisima','precio abusivo','malisimo','malisima',\n    'hijos de puta','hijo de puta','hija de puta','cabrones','cabron','cabrona','gilipollas',\n    'estafa total','unos estafadores','son unos ladrones','ladrones y estafadores',\n\n    'bad','awful','terrible','horrible','worst','disappointed','disappointing','not recommend','never again',\n    'scam','scammers','thieves','thief','fraud','fraudulent','dirty','rude','slow service',\n    'bad service','very bad service','poor service','very bad','waste of money','overpriced','not worth it',\n    'avoid this place','avoid them','unprofessional','useless','disgusting','disappointing service',\n    'they ignored me','they do not answer','no response','horrible treatment','one star',\n\n    'pessimo','pessima','terribile','orribile','deluso','deludente','non consiglio',\n    'truffa','truffatori','ladri','sporco','scortese','pessimo servizio','mai piu',\n    'carissimo','vergognoso','imbarazzante','poca professionalita','male',\n\n    'pessimo','pessima','terrivel','horrivel','decepcionado','decepcionante','nao recomendo',\n    'golpe','fraude','ladroes','ladrao','sujo','rude','atendimento pessimo','nunca mais',\n    'muito caro','carissimo','sem resposta','nao respondem','mal',\n\n    'dolent','dolenta','pessim','pessima','fatal','decepcio','decebut','no recomano',\n    'mal servei','molt mal servei','mala atenci\u00f3','mala atencio','molt mala atenci\u00f3','molt mala atencio',\n    'estafa','estafadors','lladres','brut','bruta','bruts','brutes','vergonyos','vergonyosa',\n    'servei pesssim','molt malament','tracte horrible',\n    'no hi tornare','mai mes','carissim','carissima','gens professional','impresentable','malament'\n  ];\n\n  var NEU_WORDS = [\n    'correcto','correcta','normal','normales','aceptable','aceptables','cumple','cumplio',\n    'sin m\u00e1s','sin mas','regular','ok','bien sin m\u00e1s','bien sin mas','ni fu ni fa',\n    'normalito','normalita','pasable','mejorable','mejorable pero bien',\n    'todo correcto','servicio correcto','trato correcto','comida correcta',\n    'precio normal','sin sorpresas','normal tirando a bien','normal tirando a mal',\n    'okay','average','decent','acceptable','fine','nothing special','so so','fair',\n    'nella media','normale','accettabile','cosi cosi','regolare',\n    'aceitavel','razoavel','mais ou menos',\n    'correcte','correcta','acceptable','regular','sense mes','sense m\u00e9s',\n    'passable','millorable','tot correcte'\n  ];\n\n  var PHRASE_WEIGHTS = {\n    pos: [\n      ['muy buen servicio', 6],['buen servicio', 4],['muy buen trato', 6],['buen trato', 4],\n      ['muy buena atenci\u00f3n', 6],['buena atenci\u00f3n', 4],['trato excelente', 5],['servicio excelente', 5],\n      ['atenci\u00f3n excelente', 5],['excelente atenci\u00f3n', 5],['muy recomendable', 4],['100% recomendable', 5],\n      ['volveremos seguro', 4],['volveria seguro', 4],['todo perfecto', 6],['todo genial', 5],\n      ['todo muy bien', 5],['muy profesionales', 4],['gran trabajo', 4],['sin ning\u00fan problema', 3],\n      ['ningun problema', 3],['vale la pena', 3],['merece la pena', 3],['great service', 5],\n      ['good service', 4],['very good service', 6],['highly recommend', 5],['very professional', 4],\n      ['five stars', 5],['bon servei', 4],['molt bon servei', 6],['bona atenci\u00f3', 4],\n      ['molt bona atenci\u00f3', 6],['tracte excel\u00b7lent', 5],['tot perfecte', 6],['muy contento', 4],['muy contenta', 4],\n      ['contento con la compra', 5],['contenta con la compra', 5],['muy contento con la compra', 6],['muy contenta con la compra', 6],\n      ['contento con el producto', 5],['contenta con el producto', 5],['muy contento con el producto', 6],['muy contenta con el producto', 6],\n      ['contento con el servicio', 5],['contenta con el servicio', 5],['muy contento con el servicio', 6],['muy contenta con el servicio', 6],\n      ['contento con el resultado', 5],['contenta con el resultado', 5],['muy contento con el resultado', 6],['muy contenta con el resultado', 6],\n      ['satisfecho con la compra', 5],['satisfecha con la compra', 5],['muy satisfecho con la compra', 6],['muy satisfecha con la compra', 6]\n    ],\n    neg: [\n      ['hijos de puta', 10],['hijo de puta', 10],['hija de puta', 10],['cabrones', 9],['cabron', 9],['cabrona', 9],\n      ['gilipollas', 9],['ladrones', 9],['ladron', 9],['estafadores', 9],['estafador', 9],['estafadora', 9],\n      ['son unos ladrones', 12],['unos estafadores', 12],['ladrones y estafadores', 14],['estafa total', 12],\n      ['no recomiendo para nada', 7],['no recomiendo', 6],['no volvere', 6],['no volveria', 6],\n      ['nunca mas', 6],['jamas volvere', 7],['jam\u00e1s volver\u00e9', 7],['peor imposible', 7],\n      ['una verg\u00fcenza', 7],['una verguenza', 7],['trato horrible', 6],['trato p\u00e9simo', 6],\n      ['trato pesimo', 6],['servicio nefasto', 7],['p\u00e9simo servicio', 7],['pesimo servicio', 7],\n      ['muy mal servicio', 7],['mal servicio', 5],['muy mala atenci\u00f3n', 7],['mala atenci\u00f3n', 5],\n      ['mala atencion', 5],['muy mal', 4],['asqueroso', 6],['me dejaron tirado', 6],\n      ['me dejaron tirada', 6],['no responden', 5],['no contestan', 5],['no solucionaron nada', 6],\n      ['sin soluci\u00f3n', 5],['sin solucion', 5],['es una estafa', 10],['scam', 8],['scammers', 9],\n      ['thieves', 9],['fraud', 8],['never again', 6],['avoid this place', 7],\n      ['molt malament', 5],['no recomano', 6],['mai mes', 6],['servei pessim', 7],['servei p\u00e8ssim', 7]\n    ],\n    neu: [\n      ['todo correcto', 3],['sin m\u00e1s', 2],['sin mas', 2],['ni fu ni fa', 3],\n      ['regular', 2],['nothing special', 2],['correcte', 2],['tot correcte', 3]\n    ]\n  };\n\n  var TOPICS = {\n    'Service client': ['atenci\u00f3n','atencion','servicio','trato','amable','amables','personal','equipo','trabajadores','empleados','staff','camarero','camarera','camareros','camareras'],\n    'Vitesse \/ D\u00e9lais':  ['r\u00e1pido','rapido','r\u00e1pida','rapida','lento','lenta','tiempo','tardaron','espera','plazo','puntual','retraso','entrega'],\n    'Qualit\u00e9':             ['calidad','resultado','acabado','trabajo','profesional','profesionales','impecable','detalle','comida','platos','carne','arroz','risotto'],\n    'Prix \/ Valeur':      ['precio','caro','cara','barato','barata','coste','costo','dinero','econ\u00f3mico','economico','valor','40-50','50','\u20ac'],\n    'Communication':        ['comunicaci\u00f3n','comunicacion','informaci\u00f3n','informacion','respuesta','responden','contacto','email','llamada','whatsapp'],\n    'R\u00e9solution':          ['problema','problemas','soluci\u00f3n','solucion','resolvieron','arreglaron','solucionaron','incidencia'],\n    'Recommandation':       ['recomiendo','recomendable','volver\u00eda','volveria','repetir\u00eda','repetiria','amigos','familia']\n  };\n\n  \/\/ ============================================================\n  \/\/ 2) Helpers\n  \/\/ ============================================================\n  function normalizeText(s) {\n    if (!s) return '';\n    return s\n      .toLowerCase()\n      .normalize('NFD')\n      .replace(\/[\\u0300-\\u036f]\/g, '')\n      .replace(\/\\s+\/g, ' ')\n      .trim();\n  }\n\n  function escapeRegExp(str) {\n    return str.replace(\/[.*+?^${}()|[\\]\\\\]\/g, '\\\\$&');\n  }\n\n  function wordRegex(word) {\n    return new RegExp('(^|[^a-z0-9\u00e1\u00e9\u00ed\u00f3\u00fa\u00fc\u00f1\u00e7\u00b7])' + escapeRegExp(word) + '([^a-z0-9\u00e1\u00e9\u00ed\u00f3\u00fa\u00fc\u00f1\u00e7\u00b7]|$)', 'i');\n  }\n\n  function countMatchesWeighted(textNorm, words, defaultWeight) {\n    var n = 0;\n    var hits = 0;\n    for (var i = 0; i < words.length; i++) {\n      var w = normalizeText(words[i]);\n      if (!w) continue;\n      if (wordRegex(w).test(textNorm)) {\n        n += defaultWeight;\n        hits++;\n      }\n    }\n    return { score: n, hits: hits };\n  }\n\n  function countPhraseWeights(textNorm, phrases) {\n    var score = 0;\n    var hits = 0;\n    for (var i = 0; i < phrases.length; i++) {\n      var phrase = normalizeText(phrases[i][0]);\n      var weight = phrases[i][1] || 1;\n      if (!phrase) continue;\n      if (textNorm.indexOf(phrase) !== -1) {\n        score += weight;\n        hits++;\n      }\n    }\n    return { score: score, hits: hits };\n  }\n\n  function hasNearNegation(textNorm, wordNorm) {\n    var idx = textNorm.indexOf(wordNorm);\n    if (idx === -1) return false;\n    var left = textNorm.slice(Math.max(0, idx - 28), idx);\n    return \/\\b(no|not|nao|non|mai|jamais|nunca|jamas|sense)\\b\/.test(left);\n  }\n\n  function hasNearIntensifier(textNorm, wordNorm) {\n    var idx = textNorm.indexOf(wordNorm);\n    if (idx === -1) return false;\n    var left = textNorm.slice(Math.max(0, idx - 18), idx);\n    return \/\\b(muy|super|realmente|bastante|extremadamente|molt|very|really|so)\\b\/.test(left);\n  }\n\n  function hasStrongNegative(textNorm) {\n    return \/\\b(hijos? de puta|cabrones?|gilipollas|ladrones?|estafadores?|estafa total|es una estafa|scam|scammers|thieves|fraud)\\b\/i.test(textNorm);\n  }\n\n  function hasStrongPositive(textNorm) {\n    return \/\\b(muy buen servicio|buen servicio|good service|very good service|todo perfecto|100% recomendable|highly recommend|five stars|trato excelente|servicio excelente|atenci\u00f3n excelente|molt bon servei|bon servei|tot perfecte|muy contento|muy contenta|contento con la compra|contenta con la compra|muy contento con la compra|muy contenta con la compra|satisfecho con la compra|satisfecha con la compra)\\b\/i.test(textNorm);\n  }\n\n  function isShortRecognizableReview(text) {\n    var t = normalizeText(text);\n    if (!t) return false;\n\n    if (detectStars(text) !== null) return true;\n    if (hasStrongNegative(t) || hasStrongPositive(t)) return true;\n\n    if (countMatchesWeighted(t, POS_WORDS, 1).hits > 0) return true;\n    if (countMatchesWeighted(t, NEG_WORDS, 1).hits > 0) return true;\n    if (countMatchesWeighted(t, NEU_WORDS, 1).hits > 0) return true;\n\n    if (\/^[a-z\u00e1\u00e9\u00ed\u00f3\u00fa\u00fc\u00f1\u00e7\u00b7.!?]+$\/i.test(t) && t.length >= 2) return true;\n\n    return false;\n  }\n\n  function isMeaningfulReview(text) {\n    var t = normalizeText(text);\n    if (!t) return false;\n    if (t.length >= 2 && isShortRecognizableReview(t)) return true;\n    if (t.length >= 6) return true;\n    return false;\n  }\n\n  function countWords(text) {\n    var t = normalizeText(text);\n    if (!t) return 0;\n    return t.split(' ').filter(Boolean).length;\n  }\n\n  function clamp(num, min, max) {\n    return Math.max(min, Math.min(max, num));\n  }\n\n  \/\/ ============================================================\n  \/\/ 3) Estrellas\n  \/\/ ============================================================\n  function detectStars(rawText) {\n    if (!rawText) return null;\n\n    var starChar = '\ue838';\n    var count = 0;\n    for (var i = 0; i < rawText.length; i++) {\n      if (rawText[i] === starChar) count++;\n    }\n    if (count >= 1 && count <= 5) return count;\n\n    var m = rawText.match(\/(?:comida|servicio)\\s*:\\s*([1-5])\/ig);\n    if (m && m.length) {\n      var sum = 0, c = 0;\n      for (var j = 0; j < m.length; j++) {\n        var mm = m[j].match(\/([1-5])$\/);\n        if (mm) { sum += parseInt(mm[1], 10); c++; }\n      }\n      if (c) return Math.round(sum \/ c);\n    }\n\n    var m2 = rawText.match(\/\\b([1-5])\\s*\\\/\\s*5\\b\/);\n    if (m2) return parseInt(m2[1], 10);\n\n    return null;\n  }\n\n  \/\/ ============================================================\n  \/\/ 4) Clasificador sentimiento\n  \/\/ ============================================================\n  function analyzeReview(rawText) {\n    var stars = detectStars(rawText);\n    var t = normalizeText(rawText);\n\n    if (!t) return 'neu';\n\n    if (\n      t === 'muy buen servicio' || t === 'buen servicio' || t === 'good service' ||\n      t === 'bon servei' || t === 'molt bon servei' || t === 'muy contento' ||\n      t === 'muy contenta' || t === 'contento' || t === 'contenta' ||\n      t === 'bien' || t === 'genial' || t === 'perfecto' || t === 'perfecta' ||\n      t === 'contento con la compra' || t === 'contenta con la compra' ||\n      t === 'muy contento con la compra' || t === 'muy contenta con la compra' ||\n      t === 'satisfecho con la compra' || t === 'satisfecha con la compra'\n    ) {\n      return 'pos';\n    }\n\n    if (\n      t === 'fatal' || t === 'mal' || t === 'malo' || t === 'mala' ||\n      t === 'terrible' || t === 'horrible' || t === 'estafa'\n    ) {\n      return 'neg';\n    }\n\n    if (\n      t === 'ok' || t === 'okay' || t === 'regular' || t === 'correcto' ||\n      t === 'correcta' || t === 'normal'\n    ) {\n      return 'neu';\n    }\n\n    if (t.length < 10 && stars !== null) {\n      if (stars >= 4) return 'pos';\n      if (stars <= 2) return 'neg';\n      return 'neu';\n    }\n\n    var posBase = countMatchesWeighted(t, POS_WORDS, 1);\n    var negBase = countMatchesWeighted(t, NEG_WORDS, 1);\n    var neuBase = countMatchesWeighted(t, NEU_WORDS, 1);\n\n    var pos = posBase.score;\n    var neg = negBase.score;\n    var neu = neuBase.score;\n\n    var posPhrases = countPhraseWeights(t, PHRASE_WEIGHTS.pos);\n    var negPhrases = countPhraseWeights(t, PHRASE_WEIGHTS.neg);\n    var neuPhrases = countPhraseWeights(t, PHRASE_WEIGHTS.neu);\n\n    pos += posPhrases.score;\n    neg += negPhrases.score;\n    neu += neuPhrases.score;\n\n    for (var i = 0; i < POS_WORDS.length; i++) {\n      var pw = normalizeText(POS_WORDS[i]);\n      if (!pw) continue;\n      if (t.indexOf(pw) !== -1 && hasNearNegation(t, pw)) {\n        pos = Math.max(0, pos - 1);\n        neg += 1;\n      }\n      if (t.indexOf(pw) !== -1 && hasNearIntensifier(t, pw)) {\n        pos += 1;\n      }\n    }\n\n    for (var j = 0; j < NEG_WORDS.length; j++) {\n      var nw = normalizeText(NEG_WORDS[j]);\n      if (!nw) continue;\n      if (t.indexOf(nw) !== -1 && hasNearIntensifier(t, nw)) {\n        neg += 1;\n      }\n    }\n\n    if (\/\\b(no volver(e|ia|\u00e9)|never again|not recommend|no recomiendo|no recomano|nunca mas|jamas|jam\u00e1s)\\b\/.test(t)) neg += 4;\n    if (\/\\b(10\\\/10|5\\\/5|cinco estrellas|five stars)\\b\/.test(t)) pos += 3;\n    if (\/\\b(correcto|correcta|normal|acceptable|regular|ok|okay|ni fu ni fa|tot correcte)\\b\/.test(t)) neu += 2;\n\n    if (hasStrongNegative(t)) neg += 8;\n    if (hasStrongPositive(t)) pos += 5;\n\n    if (stars !== null) {\n      if (stars === 5) pos += 4;\n      else if (stars === 4) pos += 3;\n      else if (stars === 3) neu += 2;\n      else if (stars === 2) neg += 4;\n      else if (stars === 1) neg += 6;\n    }\n\n    if (hasStrongNegative(t) && neg >= pos + 3) return 'neg';\n    if (hasStrongPositive(t) && pos >= neg + 2) return 'pos';\n\n    if (neg >= pos + neu + 2) return 'neg';\n    if (pos >= neg + neu + 2) return 'pos';\n\n    if (neg >= pos + 2) return 'neg';\n    if (pos >= neg + 2) return 'pos';\n\n    if (neu > 0 && Math.abs(pos - neg) <= 1) return 'neu';\n\n    return 'neu';\n  }\n\n  \/\/ ============================================================\n  \/\/ 5) Parser Google\/Trustpilot\n  \/\/ ============================================================\n  var textarea = document.getElementById('rv-input');\n  var btnAnalyze = document.getElementById('rv-btn');\n  var btnClear = document.getElementById('rv-clear');\n\n  var currentFormat = 'auto';\n  document.querySelectorAll('.ra-fmt-btn').forEach(function(btn) {\n    btn.addEventListener('click', function() {\n      document.querySelectorAll('.ra-fmt-btn').forEach(function(b) { b.classList.remove('active'); });\n      btn.classList.add('active');\n      currentFormat = btn.dataset.fmt;\n      updateCounter();\n    });\n  });\n\n  function updateCounter() {\n    var text = textarea.value.trim();\n    var chars = text.length;\n    var reviews = text ? splitReviews(text).length : 0;\n    document.getElementById('rv-chars').textContent =\n      chars + ' caract\u00e8res \u00b7 ' + reviews + ' avis' + (reviews !== 1 ? '' : '') + ' d\u00e9tect\u00e9' + (reviews !== 1 ? 's' : '');\n  }\n\n  textarea.addEventListener('input', updateCounter);\n\n  function isProfileMeta(line) {\n    return \/^Local Guide\\s*\u00b7\/i.test(line) ||\n           \/^\\d+\\s+rese\u00f1as?\\s*(\u00b7|$)\/i.test(line);\n  }\n\n  function isNoiseGoogle(line) {\n    if (!line || line.length < 1) return true;\n\n    if (\/^\ue5d4$\/.test(line)) return true;\n    if (\/^\ue8dc$\/.test(line)) return true;\n    if (\/^\ue80d$\/.test(line)) return true;\n\n    if (\/^Local Guide\\s*\u00b7\/i.test(line)) return true;\n    if (\/^\\d+\\s+rese\u00f1as?\\s*(\u00b7|$)\/i.test(line)) return true;\n    if (\/^\\d+\\s+fotos?$\/i.test(line)) return true;\n\n    if (\/^Hace\\s+\\d+\\s+horas?\/i.test(line)) return true;\n    if (\/^Hace\\s+\\d+\\s+d[i\u00ed]as?\/i.test(line)) return true;\n    if (\/^Hace\\s+una?\\s+(hora|dia|semana|mes|a\u00f1o)\/i.test(line)) return true;\n    if (\/^hace\\s+\\d+\\s+(hora|horas|d[i\u00ed]a|d[i\u00ed]as|semana|semanas|mes|meses|a\u00f1o|a\u00f1os)\/i.test(line)) return true;\n    if (\/^Fecha de edici[o\u00f3]n:\/i.test(line)) return true;\n\n    if (\/^Nueva$\/i.test(line)) return true;\n    if (\/^Me gusta$\/i.test(line)) return true;\n    if (\/^Compartir$\/i.test(line)) return true;\n    if (\/^M\u00e1s$\/i.test(line)) return true;\n    if (\/^\u2026\\s*M\u00e1s$\/i.test(line) || \/^\\.\\.\\.\\s*M\u00e1s$\/i.test(line)) return true;\n\n    if (\/^Traducido por Google\/i.test(line)) return true;\n    if (\/^Ver original\/i.test(line)) return true;\n\n    if (\/^Servicio$\/i.test(line)) return true;\n    if (\/^Comida$\/i.test(line)) return true;\n    if (\/^Tipo de comida$\/i.test(line)) return true;\n    if (\/^(Com[i\u00ed]\\s+all[i\u00ed]|Cena|Almuerzo|Comida)\\b\/i.test(line)) return true;\n    if (\/^Precio por persona\/i.test(line)) return true;\n\n    return false;\n  }\n\n  function isReplyGoogle(line) {\n    return \/^Respuesta del propietario\/i.test(line) ||\n           \/^Buenos d[i\u00ed]as\/i.test(line) ||\n           \/^[\u00a1!]?Hola\\b\/i.test(line) ||\n           \/^Estimad[oa]\/i.test(line) ||\n           \/^Querid[oa]\/i.test(line) ||\n           \/^En primer lugar\/i.test(line) ||\n           \/^Muchas gracias\/i.test(line) ||\n           \/^Nos alegra\/i.test(line) ||\n           \/^Gracias por\/i.test(line) ||\n           \/^Lamentamos\/i.test(line) ||\n           \/^Sentimos\/i.test(line);\n  }\n\n  function parseGoogleWithValuacion(text) {\n    var blocks = text.split(\/\\nValorada con[^\\n]*\\n\/);\n    var reviews = [];\n    for (var i = 1; i < blocks.length; i++) {\n      var lines = blocks[i].split('\\n').map(function(l){return l.trim();}).filter(function(l){return l;});\n      var rvLines = [];\n      var inReply = false;\n\n      for (var j = 0; j < lines.length; j++) {\n        var l = lines[j];\n\n        if (isReplyGoogle(l)) { inReply = true; }\n        if (inReply) continue;\n\n        if (\/^[\u00da\u00fa]til\/i.test(l) || \/^Compartir$\/i.test(l)) break;\n        if (\/^(Logotipo de|Respuesta de|Determina la)\/i.test(l)) break;\n        if (isNoiseGoogle(l)) continue;\n\n        rvLines.push(l);\n      }\n\n      var rv = rvLines.join(' ').trim();\n      if (isMeaningfulReview(rv)) reviews.push(rv);\n    }\n    return reviews;\n  }\n\n  function parseGoogleByProfile(text) {\n    var lines = text.split('\\n').map(function(l){return l.trim();});\n    var starts = [];\n    for (var i = 0; i < lines.length - 1; i++) {\n      if (lines[i] && isProfileMeta(lines[i+1])) starts.push(i);\n    }\n    if (!starts.length) return null;\n\n    var reviews = [];\n    for (var idx = 0; idx < starts.length; idx++) {\n      var start = starts[idx];\n      var end = idx + 1 < starts.length ? starts[idx+1] : lines.length;\n      var block = lines.slice(start, end);\n\n      var rvLines = [];\n      var inReply = false;\n\n      for (var j = 0; j < block.length; j++) {\n        var l = block[j];\n\n        if (isReplyGoogle(l)) { inReply = true; }\n        if (inReply) continue;\n\n        if (l.indexOf('\ue838') !== -1) { rvLines.push(l); continue; }\n        if (isNoiseGoogle(l)) continue;\n        if (j === 0) continue;\n\n        rvLines.push(l);\n      }\n\n      var rv = rvLines.join(' ').trim();\n      if (isMeaningfulReview(rv)) reviews.push(rv);\n    }\n    return reviews;\n  }\n\n  function parseTrustpilot(text) {\n    var blocks = text.split(\/\\nRese\u00f1a verificada\\n\/i);\n    var reviews = [];\n    for (var i = 1; i < blocks.length; i++) {\n      var lines = blocks[i].split('\\n').map(function(l){return l.trim();}).filter(function(l){return l;});\n      var rvLines = [];\n      for (var j = 0; j < lines.length; j++) {\n        var l = lines[j];\n        if (\/^Experiencia desde:\/i.test(l)) break;\n        if (\/^Respuesta de \/i.test(l)) break;\n        if (\/^[\u00da\u00fa]til\/i.test(l) || \/^Compartir$\/i.test(l)) break;\n        if (\/^(Lamentamos|Sentimos|Gracias por|Agradecemos|Nos alegra|Disculpe|[\u00a1!]?Hola)\\b\/i.test(l)) break;\n        if (\/^\\d{1,2}\\s+(ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)\\s+\\d{4}$\/i.test(l)) continue;\n        rvLines.push(l);\n      }\n      var rv = rvLines.join(' ').trim();\n      if (isMeaningfulReview(rv)) reviews.push(rv);\n    }\n    return reviews;\n  }\n\n  function splitReviews(text) {\n    var fmt = currentFormat;\n\n    if (fmt === 'plain') {\n      return text\n        .split(\/\\n\\s*\\n\/)\n        .map(function(r){ return r.trim(); })\n        .filter(function(r){ return isMeaningfulReview(r); });\n    }\n\n    if (fmt === 'google' || fmt === 'auto') {\n      if (\/Valorada con\/i.test(text)) return parseGoogleWithValuacion(text);\n      var byProfile = parseGoogleByProfile(text);\n      if (byProfile && byProfile.length > 0) return byProfile;\n    }\n\n    if (fmt === 'trustpilot' || fmt === 'auto') {\n      if (\/Rese\u00f1a verificada\/i.test(text)) return parseTrustpilot(text);\n    }\n\n    return text\n      .split(\/\\n\\s*\\n\/)\n      .map(function(r){ return r.trim(); })\n      .filter(function(r){ return isMeaningfulReview(r); });\n  }\n\n  \/\/ ============================================================\n  \/\/ 6) M\u00e9tricas y lecturas\n  \/\/ ============================================================\n  function getTopics(reviews) {\n    var counts = {};\n    Object.keys(TOPICS).forEach(function(topic) { counts[topic] = 0; });\n\n    reviews.forEach(function(rv) {\n      var lower = normalizeText(rv);\n      Object.keys(TOPICS).forEach(function(topic) {\n        for (var k = 0; k < TOPICS[topic].length; k++) {\n          var kw = normalizeText(TOPICS[topic][k]);\n          if (kw && wordRegex(kw).test(lower)) { counts[topic]++; break; }\n        }\n      });\n    });\n\n    return Object.entries(counts)\n      .filter(function(e) { return e[1] > 0; })\n      .sort(function(a, b) { return b[1] - a[1]; })\n      .slice(0, 6);\n  }\n\n  function getTopicSentimentBreakdown(reviews, sentiments) {\n    var stats = {};\n    Object.keys(TOPICS).forEach(function(topic) {\n      stats[topic] = { total:0, pos:0, neg:0, neu:0 };\n    });\n\n    reviews.forEach(function(rv, i) {\n      var lower = normalizeText(rv);\n      var seen = {};\n      Object.keys(TOPICS).forEach(function(topic) {\n        for (var k = 0; k < TOPICS[topic].length; k++) {\n          var kw = normalizeText(TOPICS[topic][k]);\n          if (kw && wordRegex(kw).test(lower) && !seen[topic]) {\n            seen[topic] = true;\n            stats[topic].total++;\n            stats[topic][sentiments[i]]++;\n            break;\n          }\n        }\n      });\n    });\n\n    return stats;\n  }\n\n  function getProblemTopics(topicStats) {\n    return Object.keys(topicStats)\n      .map(function(topic) {\n        return {\n          topic: topic,\n          neg: topicStats[topic].neg,\n          total: topicStats[topic].total,\n          pos: topicStats[topic].pos\n        };\n      })\n      .filter(function(item) { return item.neg > 0; })\n      .sort(function(a,b) { return b.neg - a.neg || b.total - a.total; })\n      .slice(0,4);\n  }\n\n  function getStrengthTopics(topicStats) {\n    return Object.keys(topicStats)\n      .map(function(topic) {\n        return {\n          topic: topic,\n          pos: topicStats[topic].pos,\n          total: topicStats[topic].total,\n          neg: topicStats[topic].neg\n        };\n      })\n      .filter(function(item) { return item.pos > 0; })\n      .sort(function(a,b) { return b.pos - a.pos || b.total - a.total; })\n      .slice(0,4);\n  }\n\n  function getKeywords(reviews, sentiments) {\n    var posKw = {}, negKw = {}, neuKw = {};\n\n    reviews.forEach(function(rv, i) {\n      var lower = normalizeText(rv);\n      var type = sentiments[i];\n\n      if (type === 'pos') {\n        POS_WORDS.forEach(function(w) {\n          var wn = normalizeText(w);\n          if (wn && wordRegex(wn).test(lower)) posKw[wn] = (posKw[wn] || 0) + 1;\n        });\n      } else if (type === 'neg') {\n        NEG_WORDS.forEach(function(w) {\n          var wn = normalizeText(w);\n          if (wn && wordRegex(wn).test(lower)) negKw[wn] = (negKw[wn] || 0) + 1;\n        });\n      } else {\n        NEU_WORDS.forEach(function(w) {\n          var wn = normalizeText(w);\n          if (wn && wordRegex(wn).test(lower)) neuKw[wn] = (neuKw[wn] || 0) + 1;\n        });\n      }\n    });\n\n    var top = [];\n    Object.entries(posKw).sort(function(a,b){return b[1]-a[1];}).slice(0,6).forEach(function(e){\n      top.push({ word: e[0], type: 'pos' });\n    });\n    Object.entries(negKw).sort(function(a,b){return b[1]-a[1];}).slice(0,6).forEach(function(e){\n      top.push({ word: e[0], type: 'neg' });\n    });\n    Object.entries(neuKw).sort(function(a,b){return b[1]-a[1];}).slice(0,4).forEach(function(e){\n      top.push({ word: e[0], type: 'neu' });\n    });\n    return top;\n  }\n\n  function getSatisfactionIndex(pos, neg, neu, total) {\n    if (!total) return 0;\n    return Math.round(((pos * 100) + (neu * 55) + (neg * 15)) \/ total);\n  }\n\n  function getAvgWords(reviews) {\n    if (!reviews.length) return 0;\n    var total = 0;\n    reviews.forEach(function(rv) { total += countWords(rv); });\n    return Math.round(total \/ reviews.length);\n  }\n\n  function getEmotionalIntensity(reviews) {\n    if (!reviews.length) return { label:'Moyenne', level:'mid', score:0 };\n\n    var totalPoints = 0;\n    reviews.forEach(function(rv) {\n      var t = normalizeText(rv);\n      var points = 0;\n      if (\/[!\u00a1]\/.test(rv)) points += 1;\n      if (hasStrongNegative(t) || hasStrongPositive(t)) points += 2;\n      if (\/\\b(muy|super|realmente|bastante|extremadamente|molt|very|really)\\b\/.test(t)) points += 1;\n      if (countWords(rv) > 35) points += 1;\n      totalPoints += points;\n    });\n\n    var avg = totalPoints \/ reviews.length;\n    if (avg >= 2.4) return { label:'\u00c9lev\u00e9e', level:'high', score:avg };\n    if (avg >= 1.2) return { label:'Moyenne', level:'mid', score:avg };\n    return { label:'Faible', level:'low', score:avg };\n  }\n\n  function getUrgency(score, riskPct, intensity) {\n    if (riskPct >= 18 || score < 4.8 || intensity.level === 'high') {\n      return { label:'Urgence \u00e9lev\u00e9e', level:'high' };\n    }\n    if (riskPct >= 8 || score < 6.5) {\n      return { label:'Surveiller de pr\u00e8s', level:'mid' };\n    }\n    return { label:'Situation stable', level:'low' };\n  }\n\n  function getActionForTopic(topic) {\n    if (topic === 'Service client') return 'Revoir le traitement, les d\u00e9lais de r\u00e9ponse et la fa\u00e7on de r\u00e9pondre aux avis critiques.';\n    if (topic === 'Vitesse \/ D\u00e9lais') return 'R\u00e9duire l'attente, examiner les pics de charge et prioriser les incidents r\u00e9currents.';\n    if (topic === 'Qualit\u00e9') return 'V\u00e9rifier la coh\u00e9rence du produit ou du service et d\u00e9tecter les d\u00e9fauts r\u00e9currents.';\n    if (topic === 'Prix \/ Valeur') return 'Renforcer la perception de valeur et capter davantage d'avis positifs r\u00e9cents.';\n    if (topic === 'Communication') return 'Am\u00e9liorer le suivi, les messages aux clients et la r\u00e9ponse aux incidents.';\n    if (topic === 'R\u00e9solution') return 'R\u00e9gler les probl\u00e8mes avant qu'ils ne se transforment en nouveaux avis n\u00e9gatifs.';\n    if (topic === 'Recommandation') return 'Tirer parti des clients satisfaits pour augmenter les avis r\u00e9cents.';\n    return 'Examiner ce point avant qu'il ne continue de cro\u00eetre.';\n  }\n\n  function getImprovementActions(problemTopics, strengthTopics, riskPct) {\n    var actions = [];\n    if (riskPct >= 15) {\n      actions.push('R\u00e9pondre d'abord aux avis les plus n\u00e9gatifs et les plus r\u00e9cents.');\n    } else if (riskPct >= 8) {\n      actions.push('Trier les avis critiques par priorit\u00e9 et corriger le sch\u00e9ma principal.');\n    } else {\n      actions.push('Maintenir un suivi hebdomadaire pour que les probl\u00e8mes ne prennent pas d'ampleur.');\n    }\n\n    problemTopics.forEach(function(item) {\n      actions.push(getActionForTopic(item.topic));\n    });\n\n    if (!problemTopics.length && strengthTopics.length) {\n      actions.push('Renforcer les points forts d\u00e9tect\u00e9s pour capter davantage d'avis positifs.');\n    }\n\n    return actions.slice(0,4);\n  }\n\n  function buildSummary(total, pos, neg, neu, score, topTopics) {\n    var mainTone = pos >= neg ? 'majoritairement positif' : '\u00e0 pr\u00e9dominance n\u00e9gative';\n    if (pos === 0 && neg === 0) mainTone = 'neutre';\n    if (neu > pos && neu > neg) mainTone = 'mixte ou neutre';\n\n    var topicStr = topTopics.length\n      ? topTopics.slice(0,3).map(function(t){ return '<strong>' + t[0] + '<\/strong>'; }).join(', ')\n      : 'plusieurs aspects';\n\n    var verdict = score >= 7 ? 'La perception g\u00e9n\u00e9rale est bonne.' :\n                  score >= 5 ? 'La perception est mixte.' :\n                               'La perception est n\u00e9gative.';\n\n    return '<strong>' + total + ' avis<\/strong> ont \u00e9t\u00e9 analys\u00e9s. Le ton est ' + mainTone +\n           ' (<strong>' + pos + ' positifs<\/strong>, ' + neg + ' n\u00e9gatifs, ' + neu + ' neutres), ' +\n           'avec un score de sentiment de <strong>' + score + '\/10<\/strong>. ' +\n           'Les th\u00e8mes qui p\u00e8sent le plus sont ' + topicStr + '. ' + verdict;\n  }\n\n  function buildVisibilityReadings(topTopics, strengthTopics, problemTopics, riskPct) {\n    var perception = 'Les avis fa\u00e7onnent la perception de l'entreprise autour de ' +\n      (topTopics.length ? '<strong>' + topTopics.slice(0,2).map(function(t){ return t[0]; }).join('<\/strong> y <strong>') + '<\/strong>' : 'plusieurs th\u00e8mes') + '.';\n\n    var platforms = riskPct >= 12\n      ? 'Si les avis n\u00e9gatifs restent visibles et se r\u00e9p\u00e8tent, la confiance baisse et l'entreprise devient plus vuln\u00e9rable face \u00e0 d'autres profils.'\n      : 'La lecture actuelle favorise une perception plus stable, mais il convient de maintenir un flux constant d'avis r\u00e9cents.';\n\n    var acquisition = strengthTopics.length\n      ? 'Les points forts les plus r\u00e9currents sont <strong>' + strengthTopics.slice(0,2).map(function(t){ return t.topic; }).join('<\/strong> y <strong>') + '<\/strong>. Ils constituent la base pour demander davantage d'avis positifs.'\n      : 'Vous avez besoin de davantage de signaux positifs r\u00e9currents pour renforcer la confiance et attirer de nouveaux avis favorables.';\n\n    if (problemTopics.length && riskPct >= 15) {\n      acquisition = 'Avant de demander davantage d'avis, il convient de corriger <strong>' + problemTopics[0].topic + '<\/strong> pour qu'il ne continue pas \u00e0 g\u00e9n\u00e9rer des frictions.';\n    }\n\n    return {\n      perception: perception,\n      platforms: platforms,\n      acquisition: acquisition\n    };\n  }\n\n  function buildCommercialRisk(score, riskPct, problemTopics, intensity) {\n    var text = '';\n\n    if (riskPct >= 18) {\n      text += 'Il y a une proportion \u00e9lev\u00e9e d'avis n\u00e9gatifs. <strong>Cela peut freiner les d\u00e9cisions d'achat ou de contact<\/strong> m\u00eame si l'entreprise a de bonnes opinions positives.';\n    } else if (riskPct >= 10) {\n      text += 'Il y a des signaux de friction visibles. <strong>S'ils ne sont pas corrig\u00e9s, ils peuvent peser plus que les avis favorables<\/strong> et affaiblir la confiance.';\n    } else {\n      text += 'La situation ne semble pas critique, mais <strong>laisser cro\u00eetre de petits probl\u00e8mes r\u00e9currents<\/strong> peut affecter la perception au fil du temps.';\n    }\n\n    if (problemTopics.length) {\n      text += ' Pour le moment, le principal foyer de risque se situe dans <strong>' + problemTopics[0].topic + '<\/strong>.';\n    }\n\n    if (intensity.level === 'high') {\n      text += ' De plus, le ton \u00e9motionnel est \u00e9lev\u00e9, de sorte que chaque avis critique a plus de capacit\u00e9 \u00e0 nuire \u00e0 l'image per\u00e7ue.';\n    }\n\n    return text;\n  }\n\n  function getStarsMarkup(rating) {\n    var html = '';\n    for (var i = 1; i <= 5; i++) {\n      html += '<span class=\"star' + (i <= Math.round(rating) ? ' fill' : '') + '\">\u2605<\/span>';\n    }\n    return html;\n  }\n\n  function getPatternReading(problemTopics, strengthTopics, riskPct, total) {\n    if (problemTopics.length >= 2) {\n      return {\n        main: 'Les avis critiques se concentrent sur ' + problemTopics[0].topic + ' y ' + problemTopics[1].topic + '.',\n        sub: 'Cela ne semble pas un cas isol\u00e9. Il existe un sch\u00e9ma r\u00e9current qu'il convient de traiter avant qu'il ne p\u00e8se davantage sur la perception globale.'\n      };\n    }\n\n    if (problemTopics.length === 1) {\n      return {\n        main: 'Le sch\u00e9ma dominant appara\u00eet dans ' + problemTopics[0].topic + '.',\n        sub: 'C'est le front qui affecte le plus, \u00e0 l'heure actuelle, la lecture g\u00e9n\u00e9rale des avis.'\n      };\n    }\n\n    if (strengthTopics.length >= 2) {\n      return {\n        main: 'Les avis positifs reposent surtout sur ' + strengthTopics[0].topic + ' y ' + strengthTopics[1].topic + '.',\n        sub: 'Il y a ici une opportunit\u00e9 claire de demander davantage d'avis et de renforcer la perception de l'entreprise.'\n      };\n    }\n\n    return {\n      main: 'Il n'y a pas encore de sch\u00e9ma dominant suffisamment clair.',\n      sub: 'Il faut davantage de volume ou de signaux r\u00e9currents pour identifier plus pr\u00e9cis\u00e9ment ce qui p\u00e8se le plus.'\n    };\n  }\n\n  function getFirstAction(problemTopics, strengthTopics, riskPct) {\n    if (problemTopics.length) {\n      var main = 'Examinez d'abord ' + problemTopics[0].topic + '.';\n      var sub = getActionForTopic(problemTopics[0].topic);\n\n      if (problemTopics[0].topic === 'Service client' || problemTopics[0].topic === 'Communication' || problemTopics[0].topic === 'R\u00e9solution') {\n        sub += ' Vous pourrez ensuite automatiser une partie du suivi et des r\u00e9ponses depuis le logiciel.';\n      }\n\n      return {\n        main: main,\n        sub: sub,\n        links: [\n          { text:'Voir le logiciel de gestion', url:'https:\/\/www.repscan.com\/fr\/plateforme-de-gestion-des-avis\/' },\n          { text:'R\u00e9server une d\u00e9mo gratuite', url:'https:\/\/www.repscan.com\/fr\/formulaire-de-contact\/' }\n        ]\n      };\n    }\n\n    if (strengthTopics.length) {\n      return {\n        main: 'Profitez de ' + strengthTopics[0].topic + ' pour capter davantage d'avis positifs.',\n        sub: 'Demandez davantage d'opinions r\u00e9centes et maintenez une r\u00e9ponse constante pour renforcer la perception de l'entreprise.',\n        links: [\n          { text:'Voir le logiciel de gestion', url:'https:\/\/www.repscan.com\/fr\/plateforme-de-gestion-des-avis\/' },\n          { text:'R\u00e9server une d\u00e9mo gratuite', url:'https:\/\/www.repscan.com\/fr\/formulaire-de-contact\/' }\n        ]\n      };\n    }\n\n    return {\n      main: 'Commencez par trier et r\u00e9pondre aux avis les plus r\u00e9cents.',\n      sub: 'Avec plus de volume et de suivi, vous verrez plus t\u00f4t quel sch\u00e9ma domine et quels changements il convient de prioriser.',\n      links: [\n        { text:'R\u00e9pondre aux avis avec l'IA', url:'https:\/\/www.repscan.com\/fr\/repondre-avis-avec-ia\/' },\n        { text:'R\u00e9server une d\u00e9mo gratuite', url:'https:\/\/www.repscan.com\/fr\/formulaire-de-contact\/' }\n      ]\n    };\n  }\n\n  function getFastRead(score, riskPct, pos, neg, neu) {\n    if (score < 5) {\n      return 'La lecture actuelle est <strong>d\u00e9licate<\/strong>. Il y a plus de friction que souhaitable et il convient d'intervenir avant qu'elle ne continue de cro\u00eetre.';\n    }\n    if (riskPct >= 15) {\n      return 'Il y a des avis positifs, mais <strong>le poids des avis n\u00e9gatifs est d\u00e9j\u00e0 visible<\/strong> et peut conditionner la d\u00e9cision de nouveaux clients.';\n    }\n    if (pos > neg) {\n      return 'La perception est <strong>acceptable ou bonne<\/strong>, bien qu'il reste une marge pour am\u00e9liorer la coh\u00e9rence et capter davantage d'opinions favorables.';\n    }\n    return 'L'entreprise transmet une lecture <strong>mixte<\/strong>. Il y a de bons points, mais ils ne p\u00e8sent pas encore assez.';\n  }\n\n  \/\/ ============================================================\n  \/\/ 7) UI + ejecuci\u00f3n\n  \/\/ ============================================================\n  var pendingAnalysis = null;\n  var thinkingTimer = null;\n  var thinkingInterval = null;\n\n  function openPopup() {\n    document.getElementById('ra-popup-overlay').classList.add('open');\n    document.body.style.overflow = 'hidden';\n  }\n\n  function closePopup() {\n    document.getElementById('ra-popup-overlay').classList.remove('open');\n    document.body.style.overflow = '';\n  }\n\n  function openThinkingPopup() {\n    var overlay = document.getElementById('ra-thinking-overlay');\n    if (!overlay) return;\n    overlay.classList.add('open');\n    overlay.setAttribute('aria-hidden', 'false');\n    document.body.style.overflow = 'hidden';\n  }\n\n  function closeThinkingPopup() {\n    var overlay = document.getElementById('ra-thinking-overlay');\n    if (!overlay) return;\n    overlay.classList.remove('open');\n    overlay.setAttribute('aria-hidden', 'true');\n    document.body.style.overflow = '';\n  }\n\n  function startThinkingAndAnalyze(reviews) {\n    var seconds = 7;\n    var secondsEl = document.getElementById('ra-thinking-seconds');\n\n    if (thinkingTimer) {\n      clearTimeout(thinkingTimer);\n      thinkingTimer = null;\n    }\n\n    if (thinkingInterval) {\n      clearInterval(thinkingInterval);\n      thinkingInterval = null;\n    }\n\n    if (secondsEl) secondsEl.textContent = seconds;\n\n    openThinkingPopup();\n\n    thinkingInterval = setInterval(function() {\n      seconds--;\n      if (secondsEl && seconds >= 0) {\n        secondsEl.textContent = seconds;\n      }\n    }, 1000);\n\n    thinkingTimer = setTimeout(function() {\n      if (thinkingInterval) {\n        clearInterval(thinkingInterval);\n        thinkingInterval = null;\n      }\n      thinkingTimer = null;\n      closeThinkingPopup();\n      runAnalysis(reviews);\n    }, 7000);\n  }\n\n  function closePopupAndAnalyze() {\n    if (!pendingAnalysis) return;\n    closePopup();\n    var reviews = pendingAnalysis.reviews;\n    pendingAnalysis = null;\n    startThinkingAndAnalyze(reviews);\n  }\n\n  btnAnalyze.addEventListener('click', function() {\n    var text = textarea.value.trim();\n    if (!text) return;\n\n    var reviews = splitReviews(text);\n    if (!reviews.length) return;\n\n    if (!pendingAnalysis) {\n      pendingAnalysis = { text: text, reviews: reviews };\n      openPopup();\n    }\n  });\n\n  document.getElementById('ra-popup-close').addEventListener('click', closePopupAndAnalyze);\n\n  document.getElementById('ra-popup-overlay').addEventListener('click', function(e) {\n    if (e.target === this) closePopupAndAnalyze();\n  });\n\n  textarea.addEventListener('keydown', function(e) {\n    if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) {\n      btnAnalyze.click();\n    }\n  });\n\n  btnClear.addEventListener('click', function() {\n    textarea.value = '';\n    updateCounter();\n    document.getElementById('rv-results').classList.remove('visible');\n    textarea.focus();\n  });\n\n  window.addEventListener('message', function(event) {\n    if (event.data && event.data.constructor === String && event.data.indexOf('|') !== -1) {\n      var parts = event.data.split('|');\n      if (parts.length === 2 || parts.length === 3) {\n        var zf_ifrm_ht_nw = (parseInt(parts[1], 10) + 15) + 'px';\n        var iframe = document.getElementById('ra-zoho-iframe');\n        if (iframe && zf_ifrm_ht_nw && zf_ifrm_ht_nw !== 'NaNpx') iframe.style.height = zf_ifrm_ht_nw;\n        if (parts.length === 3) setTimeout(closePopupAndAnalyze, 250);\n      }\n    }\n\n    if (event.data && typeof event.data === 'string') {\n      try {\n        var msg = JSON.parse(event.data);\n        if (msg && (msg.action === 'formSubmit' || msg.status === 'success')) {\n          setTimeout(closePopupAndAnalyze, 800);\n        }\n      } catch(err) {}\n    }\n\n    if (event.data === 'submit' || event.data === 'formSubmit') {\n      setTimeout(closePopupAndAnalyze, 800);\n    }\n  }, false);\n\n  function setUrgencyChip(data) {\n    var chip = document.getElementById('rv-urgency-chip');\n    chip.className = 'ra-status-chip ' + data.level;\n    chip.textContent = data.label;\n  }\n\n  function fillList(id, items, formatter, emptyText) {\n    var el = document.getElementById(id);\n    el.innerHTML = '';\n    if (!items || !items.length) {\n      el.innerHTML = '<li>' + (emptyText || 'Il n'y a pas assez de signaux pour approfondir la lecture.') + '<\/li>';\n      return;\n    }\n    items.forEach(function(item) {\n      var li = document.createElement('li');\n      li.innerHTML = formatter ? formatter(item) : item;\n      el.appendChild(li);\n    });\n  }\n\n  function setIntensityPill(intensity) {\n    var pill = document.getElementById('rv-intensity-pill');\n    var text = document.getElementById('rv-intensity-pill-text');\n    pill.className = 'ra-mini-pill ' + intensity.level;\n    text.textContent = intensity.label;\n  }\n\n  function setActionLinks(links) {\n    var el = document.getElementById('rv-action-links');\n    el.innerHTML = '';\n    if (!links || !links.length) return;\n\n    links.forEach(function(link) {\n      var a = document.createElement('a');\n      a.className = 'ra-reco-link';\n      a.href = link.url;\n      a.textContent = link.text;\n      el.appendChild(a);\n    });\n  }\n\n  function runAnalysis(reviews) {\n    var sentiments = reviews.map(analyzeReview);\n    var pos = sentiments.filter(function(s){ return s === 'pos'; }).length;\n    var neg = sentiments.filter(function(s){ return s === 'neg'; }).length;\n    var neu = sentiments.filter(function(s){ return s === 'neu'; }).length;\n    var total = reviews.length;\n\n    var rawScore = total > 0 ? ((pos * 9) + (neu * 5) + (neg * 2)) \/ total : 0;\n    var score = Math.round(rawScore * 10) \/ 10;\n\n    var topTopics = getTopics(reviews);\n    var keywords  = getKeywords(reviews, sentiments);\n    var topicStats = getTopicSentimentBreakdown(reviews, sentiments);\n    var problemTopics = getProblemTopics(topicStats);\n    var strengthTopics = getStrengthTopics(topicStats);\n\n    var ratingEst = Math.round((score \/ 2) * 10) \/ 10;\n    var satisfaction = getSatisfactionIndex(pos, neg, neu, total);\n    var riskPct = total ? Math.round((neg \/ total) * 100) : 0;\n    var neuPct = total ? Math.round((neu \/ total) * 100) : 0;\n    var posPct = total ? Math.round((pos \/ total) * 100) : 0;\n    var avgWords = getAvgWords(reviews);\n    var intensity = getEmotionalIntensity(reviews);\n    var urgency = getUrgency(score, riskPct, intensity);\n\n    var problemLines = problemTopics.map(function(item) {\n      return item.topic + ' (' + item.neg + ' mentions n\u00e9gatives)';\n    });\n\n    var strengthLines = strengthTopics.map(function(item) {\n      return item.topic + ' (' + item.pos + ' mentions positives)';\n    });\n\n    var actionLines = getImprovementActions(problemTopics, strengthTopics, riskPct);\n    var visibility = buildVisibilityReadings(topTopics, strengthTopics, problemTopics, riskPct);\n    var commercialRisk = buildCommercialRisk(score, riskPct, problemTopics, intensity);\n    var summaryHtml = buildSummary(total, pos, neg, neu, score, topTopics);\n    var patternReading = getPatternReading(problemTopics, strengthTopics, riskPct, total);\n    var firstAction = getFirstAction(problemTopics, strengthTopics, riskPct);\n    var fastRead = getFastRead(score, riskPct, pos, neg, neu);\n\n    var scoreEl  = document.getElementById('rv-score-num');\n    var barEl    = document.getElementById('rv-score-bar');\n    var verdictEl = document.getElementById('rv-score-verdict');\n\n    scoreEl.textContent = score;\n\n    var color = score >= 7 ? 'var(--ra-green)' : score >= 5 ? 'var(--ra-amber)' : 'var(--ra-red)';\n    scoreEl.style.color = color;\n    barEl.style.background = color;\n\n    verdictEl.textContent = score >= 7 ? '\u2726 Perception positive' :\n                            score >= 5 ? '\u25c8 Perception mixte' :\n                                         '\u25c6 Perception n\u00e9gative';\n\n    setTimeout(function() { barEl.style.width = (score * 10) + '%'; }, 60);\n\n    document.getElementById('rv-pos-n').textContent = pos;\n    document.getElementById('rv-neu-n').textContent = neu;\n    document.getElementById('rv-neg-n').textContent = neg;\n\n    document.getElementById('rv-rating-est').textContent = ratingEst.toFixed(1) + '\/5';\n    document.getElementById('rv-rating-est-inline').textContent = ratingEst.toFixed(1) + '\/5';\n    document.getElementById('rv-satisfaction').textContent = satisfaction + '%';\n    document.getElementById('rv-satisfaction-inline').textContent = satisfaction + '%';\n    document.getElementById('rv-risk').textContent = riskPct + '%';\n    document.getElementById('rv-risk-inline').textContent = riskPct + '%';\n    document.getElementById('rv-intensity').textContent = intensity.label;\n    document.getElementById('rv-intensity-inline').textContent = intensity.label;\n    document.getElementById('rv-avg-words').textContent = avgWords;\n    document.getElementById('rv-score-fast-read').innerHTML = fastRead;\n\n    document.getElementById('rv-stars').innerHTML = getStarsMarkup(ratingEst);\n    document.getElementById('rv-mini-stars').innerHTML = getStarsMarkup(ratingEst);\n\n    setUrgencyChip(urgency);\n    setIntensityPill(intensity);\n\n    setTimeout(function() {\n      document.getElementById('rv-bar-pos').style.width = total ? (pos \/ total * 100) + '%' : '0%';\n      document.getElementById('rv-bar-neu').style.width = total ? (neu \/ total * 100) + '%' : '0%';\n      document.getElementById('rv-bar-neg').style.width = total ? (neg \/ total * 100) + '%' : '0%';\n      document.getElementById('rv-mini-risk-bar').style.width = riskPct + '%';\n    }, 60);\n\n    var topicsEl = document.getElementById('rv-topics');\n    topicsEl.innerHTML = '';\n    var maxCount = topTopics.length ? topTopics[0][1] : 1;\n\n    if (topTopics.length === 0) {\n      topicsEl.innerHTML = '<span style=\"font-family:Courier New,monospace;font-size:0.78rem;color:var(--ra-muted)\">Aucun th\u00e8me avec suffisamment de mentions n'a \u00e9t\u00e9 d\u00e9tect\u00e9.<\/span>';\n    } else {\n      topTopics.forEach(function(t) {\n        var pct = Math.round((t[1] \/ maxCount) * 100);\n        topicsEl.innerHTML +=\n          '<div class=\"ra-topic-row\">' +\n            '<span class=\"ra-topic-name\">' + t[0] + '<\/span>' +\n            '<div class=\"ra-topic-track\"><div class=\"ra-topic-fill\" data-pct=\"' + pct + '\" style=\"width:0%\"><\/div><\/div>' +\n            '<span class=\"ra-topic-count\">' + t[1] + '<\/span>' +\n          '<\/div>';\n      });\n      setTimeout(function() {\n        document.querySelectorAll('.ra-topic-fill').forEach(function(el) {\n          el.style.width = el.dataset.pct + '%';\n        });\n      }, 80);\n    }\n\n    var kwEl = document.getElementById('rv-kw-cloud');\n    kwEl.innerHTML = '';\n    keywords.forEach(function(kw) {\n      kwEl.innerHTML += '<span class=\"ra-kw-tag ' + kw.type + '\">' + kw.word + '<\/span>';\n    });\n    if (!keywords.length) {\n      kwEl.innerHTML = '<span style=\"font-family:Courier New,monospace;font-size:0.78rem;color:var(--ra-muted)\">Aucun mot-cl\u00e9 notable.<\/span>';\n    }\n\n    fillList('rv-problems', problemLines, function(item) {\n      return '<strong>' + item + '<\/strong>';\n    }, 'Aucun probl\u00e8me r\u00e9current avec suffisamment de poids n'est d\u00e9tect\u00e9.');\n\n    fillList('rv-strengths', strengthLines, function(item) {\n      return '<strong>' + item + '<\/strong>';\n    }, 'Il n'y a pas encore de points forts r\u00e9currents avec suffisamment de signal.');\n\n    fillList('rv-actions', actionLines, function(item) {\n      return item;\n    });\n\n    document.getElementById('rv-commercial-risk').innerHTML = commercialRisk;\n    document.getElementById('rv-visibility-perception').innerHTML = visibility.perception;\n    document.getElementById('rv-visibility-platforms').innerHTML = visibility.platforms;\n    document.getElementById('rv-visibility-acquisition').innerHTML = visibility.acquisition;\n    document.getElementById('rv-summary').innerHTML = summaryHtml;\n\n    document.getElementById('rv-pattern-main').textContent = patternReading.main;\n    document.getElementById('rv-pattern-sub').textContent = patternReading.sub;\n\n    document.getElementById('rv-action-main').textContent = firstAction.main;\n    document.getElementById('rv-action-sub').textContent = firstAction.sub;\n    setActionLinks(firstAction.links);\n\n    var res = document.getElementById('rv-results');\n    res.classList.add('visible');\n    setTimeout(function() { res.scrollIntoView({ behavior: 'smooth', block: 'start' }); }, 100);\n  }\n\n  document.getElementById('rv-reset').addEventListener('click', function() {\n    textarea.value = '';\n    updateCounter();\n    document.getElementById('rv-results').classList.remove('visible');\n    textarea.focus();\n  });\n\n  updateCounter();\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-section elementor-top-section elementor-element elementor-element-153a605 elementor-section-stretched elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"153a605\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-6267423\" data-id=\"6267423\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6186621 elementor-widget elementor-widget-heading\" data-id=\"6186621\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Commencez d\u00e8s aujourd'hui avec RepScan<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7db91c7b elementor-widget elementor-widget-html\" data-id=\"7db91c7b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"botones\">\n  <a href=\"https:\/\/www.repscan.com\/fr\/eshop\/\" id=\"boton-cta-izquierda\" class=\"boton-cta-izquierda\">\n    Souscrire maintenant\n    <span>\u279c<\/span>\n  <\/a>\n\n  <a href=\"https:\/\/www.repscan.com\/fr\/plateforme-de-gestion-des-avis\/\" id=\"boton-cta-derecha\" class=\"boton-cta-derecha\" target=\"_blank\" rel=\"noopener noreferrer\">\n    Plus d'infos\n    <span>\u279c<\/span>\n  <\/a>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-6b4a948\" data-id=\"6b4a948\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b93bd93 elementor-widget elementor-widget-image\" data-id=\"b93bd93\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"800\" height=\"622\" src=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2026\/03\/eliminador-resena.webp\" class=\"attachment-large size-large wp-image-50998\" alt=\"eliminador rese\u00f1a\" srcset=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2026\/03\/eliminador-resena.webp 800w, https:\/\/www.repscan.com\/wp-content\/uploads\/2026\/03\/eliminador-resena-300x233.webp 300w, https:\/\/www.repscan.com\/wp-content\/uploads\/2026\/03\/eliminador-resena-768x597.webp 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-section elementor-top-section elementor-element elementor-element-6d1535f9 elementor-section-stretched elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6d1535f9\" data-element_type=\"section\" data-e-type=\"section\" id=\"#faq\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;,&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-extended\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6e678dd0\" data-id=\"6e678dd0\" data-element_type=\"column\" data-e-type=\"column\" id=\"#faq\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-section elementor-inner-section elementor-element elementor-element-294940a6 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"294940a6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-136fe35b\" data-id=\"136fe35b\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1451e0ab elementor-widget elementor-widget-heading\" data-id=\"1451e0ab\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Foire aux questions sur l'analyseur d'avis avec IA<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-6bbb3aa4\" data-id=\"6bbb3aa4\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-5ae4134 elementor-widget elementor-widget-toggle\" data-id=\"5ae4134\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"toggle.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-9531\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-9531\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-angle-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-chevron-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Comment fonctionne exactement l'analyseur d'avis ?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-9531\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-9531\"><p>Notre outil utilise une intelligence artificielle entra\u00een\u00e9e avec les politiques de contenu de Google, TripAdvisor et la r\u00e9glementation du droit \u00e0 l&rsquo;honneur. Le syst\u00e8me analyse le texte \u00e0 la recherche de sch\u00e9mas de langage, de mots-cl\u00e9s d&rsquo;infraction et de structures qui justifient g\u00e9n\u00e9ralement un retrait technique ou juridique.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-9532\" class=\"elementor-tab-title\" data-tab=\"2\" role=\"button\" aria-controls=\"elementor-tab-content-9532\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-angle-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-chevron-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Le r\u00e9sultat de l'analyse est-il fiable \u00e0 100% ?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-9532\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"2\" role=\"region\" aria-labelledby=\"elementor-tab-title-9532\"><p>L&rsquo;analyseur offre une estimation de probabilit\u00e9 bas\u00e9e sur des donn\u00e9es. Bien qu&rsquo;il soit tr\u00e8s pr\u00e9cis pour d\u00e9tecter les violations de politique (comme le spam ou le langage offensant), la d\u00e9cision finale revient toujours \u00e0 la plateforme ou \u00e0 un juge. Ce que fait notre outil, c&rsquo;est vous dire si vous disposez d&rsquo;arguments solides pour gagner l&rsquo;affaire.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-9533\" class=\"elementor-tab-title\" data-tab=\"3\" role=\"button\" aria-controls=\"elementor-tab-content-9533\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-angle-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-chevron-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Que signifient les niveaux de probabilit\u00e9 ?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-9533\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"3\" role=\"region\" aria-labelledby=\"elementor-tab-title-9533\"><p><strong>\u00c9lev\u00e9<\/strong> : L&rsquo;avis enfreint clairement les politiques (insultes, spam, conflit d&rsquo;int\u00e9r\u00eats). Il est tr\u00e8s probable qu&rsquo;il puisse \u00eatre supprim\u00e9.<\/p><p><strong>Moyen :<\/strong> Il existe une zone grise. Une argumentation juridique personnalis\u00e9e est n\u00e9cessaire pour que la plateforme le retire.<\/p><p><strong>Faible :<\/strong> L&rsquo;avis semble une opinion l\u00e9gitime prot\u00e9g\u00e9e par la libert\u00e9 d&rsquo;expression.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-9534\" class=\"elementor-tab-title\" data-tab=\"4\" role=\"button\" aria-controls=\"elementor-tab-content-9534\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-angle-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-chevron-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">Mes donn\u00e9es ou le texte de l'avis sont-ils enregistr\u00e9s quelque part ?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-9534\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"4\" role=\"region\" aria-labelledby=\"elementor-tab-title-9534\"><p>Non. L&rsquo;analyse est totalement priv\u00e9e et anonyme. Le texte que vous collez est trait\u00e9 en temps r\u00e9el pour g\u00e9n\u00e9rer le diagnostic et n&rsquo;est stock\u00e9 dans aucune base de donn\u00e9es publique ni li\u00e9 \u00e0 votre entreprise, sauf si vous d\u00e9cidez de souscrire au service et de nous fournir vos coordonn\u00e9es.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section data-particle_enable=\"false\" data-particle-mobile-disabled=\"false\" class=\"elementor-section elementor-top-section elementor-element elementor-element-e411926 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e411926\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-6150141\" data-id=\"6150141\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6546c04 elementor-widget elementor-widget-html\" data-id=\"6546c04\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n    .elementor-column.elementor-col-100.elementor-top-column.elementor-element.elementor-element-43156dc\n {\n    background: white !important;\n}\n    \n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":29,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"Analyseur d'avis gratuit avec IA : collez vos avis Google ou Trustpilot et obtenez sentiment, th\u00e8mes et un r\u00e9sum\u00e9 ex\u00e9cutif en quelques secondes. Sans limites, 100% gratuit.","_mbp_gutenberg_autopost":false,"footnotes":""},"class_list":{"0":"post-56544","1":"page","2":"type-page","3":"status-publish","5":"infinite-scroll-item"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Analyseur d&#039;avis gratuit avec IA | RepScan<\/title>\n<meta name=\"description\" content=\"Analyseur d&#039;avis gratuit avec IA : collez vos avis Google ou Trustpilot et obtenez sentiment, th\u00e8mes et un r\u00e9sum\u00e9 ex\u00e9cutif en quelques secondes. Sans limites, 100% gratuit.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.repscan.com\/fr\/analyseur-avis-ia\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Analyseur d&#039;avis gratuit avec IA | RepScan\" \/>\n<meta property=\"og:description\" content=\"Analyseur d&#039;avis gratuit avec IA : collez vos avis Google ou Trustpilot et obtenez sentiment, th\u00e8mes et un r\u00e9sum\u00e9 ex\u00e9cutif en quelques secondes. Sans limites, 100% gratuit.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.repscan.com\/fr\/analyseur-avis-ia\/\" \/>\n<meta property=\"og:site_name\" content=\"RepScan\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-20T10:27:00+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/fr\\\/analyseur-avis-ia\\\/\",\"url\":\"https:\\\/\\\/www.repscan.com\\\/fr\\\/analyseur-avis-ia\\\/\",\"name\":\"Analyseur d'avis gratuit avec IA | RepScan\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.repscan.com\\\/fr\\\/#website\"},\"datePublished\":\"2026-06-20T10:23:07+00:00\",\"dateModified\":\"2026-06-20T10:27:00+00:00\",\"description\":\"Analyseur d'avis gratuit avec IA : collez vos avis Google ou Trustpilot et obtenez sentiment, th\u00e8mes et un r\u00e9sum\u00e9 ex\u00e9cutif en quelques secondes. Sans limites, 100% gratuit.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.repscan.com\\\/fr\\\/analyseur-avis-ia\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.repscan.com\\\/fr\\\/analyseur-avis-ia\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/fr\\\/analyseur-avis-ia\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.repscan.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Analyseur d&#8217;avis gratuit avec IA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/www.repscan.com\\\/fr\\\/\",\"name\":\"RepScan\",\"description\":\"Plataforma de Reputaci\u00f3n Digital\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.repscan.com\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.repscan.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/fr\\\/#organization\",\"name\":\"RepScan\",\"url\":\"https:\\\/\\\/www.repscan.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.repscan.com\\\/wp-content\\\/uploads\\\/2020\\\/07\\\/repscan_header_HQ.png\",\"contentUrl\":\"https:\\\/\\\/www.repscan.com\\\/wp-content\\\/uploads\\\/2020\\\/07\\\/repscan_header_HQ.png\",\"width\":550,\"height\":130,\"caption\":\"RepScan\"},\"image\":{\"@id\":\"https:\\\/\\\/www.repscan.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Analyseur d'avis gratuit avec IA | RepScan","description":"Analyseur d'avis gratuit avec IA : collez vos avis Google ou Trustpilot et obtenez sentiment, th\u00e8mes et un r\u00e9sum\u00e9 ex\u00e9cutif en quelques secondes. Sans limites, 100% gratuit.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.repscan.com\/fr\/analyseur-avis-ia\/","og_locale":"fr_FR","og_type":"article","og_title":"Analyseur d'avis gratuit avec IA | RepScan","og_description":"Analyseur d'avis gratuit avec IA : collez vos avis Google ou Trustpilot et obtenez sentiment, th\u00e8mes et un r\u00e9sum\u00e9 ex\u00e9cutif en quelques secondes. Sans limites, 100% gratuit.","og_url":"https:\/\/www.repscan.com\/fr\/analyseur-avis-ia\/","og_site_name":"RepScan","article_modified_time":"2026-06-20T10:27:00+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.repscan.com\/fr\/analyseur-avis-ia\/","url":"https:\/\/www.repscan.com\/fr\/analyseur-avis-ia\/","name":"Analyseur d'avis gratuit avec IA | RepScan","isPartOf":{"@id":"https:\/\/www.repscan.com\/fr\/#website"},"datePublished":"2026-06-20T10:23:07+00:00","dateModified":"2026-06-20T10:27:00+00:00","description":"Analyseur d'avis gratuit avec IA : collez vos avis Google ou Trustpilot et obtenez sentiment, th\u00e8mes et un r\u00e9sum\u00e9 ex\u00e9cutif en quelques secondes. Sans limites, 100% gratuit.","breadcrumb":{"@id":"https:\/\/www.repscan.com\/fr\/analyseur-avis-ia\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.repscan.com\/fr\/analyseur-avis-ia\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.repscan.com\/fr\/analyseur-avis-ia\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.repscan.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Analyseur d&#8217;avis gratuit avec IA"}]},{"@type":"WebSite","@id":"https:\/\/www.repscan.com\/fr\/#website","url":"https:\/\/www.repscan.com\/fr\/","name":"RepScan","description":"Plataforma de Reputaci\u00f3n Digital","publisher":{"@id":"https:\/\/www.repscan.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.repscan.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/www.repscan.com\/fr\/#organization","name":"RepScan","url":"https:\/\/www.repscan.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.repscan.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/www.repscan.com\/wp-content\/uploads\/2020\/07\/repscan_header_HQ.png","contentUrl":"https:\/\/www.repscan.com\/wp-content\/uploads\/2020\/07\/repscan_header_HQ.png","width":550,"height":130,"caption":"RepScan"},"image":{"@id":"https:\/\/www.repscan.com\/fr\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.repscan.com\/fr\/wp-json\/wp\/v2\/pages\/56544","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.repscan.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.repscan.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.repscan.com\/fr\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.repscan.com\/fr\/wp-json\/wp\/v2\/comments?post=56544"}],"version-history":[{"count":1,"href":"https:\/\/www.repscan.com\/fr\/wp-json\/wp\/v2\/pages\/56544\/revisions"}],"predecessor-version":[{"id":56555,"href":"https:\/\/www.repscan.com\/fr\/wp-json\/wp\/v2\/pages\/56544\/revisions\/56555"}],"wp:attachment":[{"href":"https:\/\/www.repscan.com\/fr\/wp-json\/wp\/v2\/media?parent=56544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}