{"id":56543,"date":"2026-06-20T12:23:02","date_gmt":"2026-06-20T10:23:02","guid":{"rendered":"https:\/\/www.repscan.com\/ai-review-analyzer\/"},"modified":"2026-06-20T12:26:58","modified_gmt":"2026-06-20T10:26:58","slug":"ai-review-analyzer","status":"publish","type":"page","link":"https:\/\/www.repscan.com\/en\/ai-review-analyzer\/","title":{"rendered":"Free AI review analyzer"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"56543\" class=\"elementor elementor-56543 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\">Free AI review analyzer<\/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>Paste the reviews from your Google listing, Trustpilot or any other platform and get a full analysis in seconds:<br \/>Sentiment score, positive\/negative distribution, most mentioned topics and an executive summary ready for decision-making.<\/p><p><strong>No limits. 100% free.<\/strong><\/p><p><strong>This analyzer is a simplified version of the <a href=\"https:\/\/www.repscan.com\/en\/review-management-software\/\"><span style=\"text-decoration: underline;\"><span style=\"color: #ff9900; text-decoration: underline;\">Review management software.<\/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\/en\/eshop\/#sidebar-triki\" id=\"boton-cta-izquierda\" class=\"boton-cta-izquierda\">\n    Get started now\n    <span>\u279c<\/span>\n  <\/a>\n\n  <a href=\"https:\/\/www.repscan.com\/en\/review-management-software\/\" id=\"boton-cta-derecha\" class=\"boton-cta-derecha\" target=\"_blank\" rel=\"noopener noreferrer\">\n    More info\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 Analysis<\/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\">Spot hidden patterns<\/div>\n      <div class=\"ben2-desc\">Identify which aspects of your business generate the most satisfaction or rejection among your customers, without reading every review one by one.<\/div>\n      <div class=\"ben2-tag\"><span class=\"ben2-tag-dot\"><\/span>Automatic sentiment<\/div>\n    <\/div>\n\n    <div class=\"ben2-card\">\n      <div class=\"ben2-number\">02 \u2014 Data<\/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\">Understand your reputation<\/div>\n      <div class=\"ben2-desc\">Turn scattered opinions into structured data: sentiment score, distribution and key topics at a glance.<\/div>\n      <div class=\"ben2-tag\"><span class=\"ben2-tag-dot\"><\/span>Executive summary<\/div>\n    <\/div>\n\n    <div class=\"ben2-card\">\n      <div class=\"ben2-number\">03 \u2014 Speed<\/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\">Results in seconds<\/div>\n      <div class=\"ben2-desc\">All you need is your email. Paste your reviews from Google Maps or Trustpilot and get the full analysis in seconds.<\/div>\n      <div class=\"ben2-tag\"><span class=\"ben2-tag-dot\"><\/span>Instant analysis<\/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        ai review analysis\n      <\/div>\n      <div class=\"ra-input-head-text\">\n        Analyze sentiment, recurring topics, risks and opportunities from reviews pasted from Google, Trustpilot, Tripadvisor or other platforms.\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 of the reviews<\/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\">Free text<\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"ra-input-label\" style=\"margin-top:1.2rem\"><span><\/span> Paste your reviews here<\/div>\n    <textarea id=\"rv-input\" placeholder=\"Paste one or several reviews copied directly from Google Maps, Trustpilot, Tripadvisor or other platforms.\"><\/textarea>\n\n    <div class=\"ra-input-footer\">\n      <span class=\"ra-char-count\" id=\"rv-chars\">0 characters \u00b7 0 reviews detected<\/span>\n      <span class=\"ra-hint-text\">Ctrl+Enter to analyze<\/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        Analyze reviews\n      <\/button>\n\n      <button class=\"ra-btn-clear\" id=\"rv-clear\" type=\"button\">\n        Clear\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>Overall sentiment<\/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                ai analysis\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                Estimated rating visible on platforms <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\">Quick read<\/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\">Overall read of perceived satisfaction.<\/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\">Risk<\/div>\n              <div class=\"ra-side-kpi-value\" id=\"rv-risk-inline\">\u2014<\/div>\n              <div class=\"ra-side-kpi-text\">Weight of negative reviews over the total analyzed.<\/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\">Intensity<\/div>\n              <div class=\"ra-side-kpi-value\" id=\"rv-intensity-inline\">\u2014<\/div>\n              <div class=\"ra-side-kpi-text\">Emotional charge detected in the 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\">Distribution<\/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\">Positive<\/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\">Neutral<\/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\">Negative<\/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\">Business indicators<\/div>\n        <div class=\"ra-metrics-grid\">\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Estimated rating<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-rating-est\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Estimated reading out of 5 based on the detected sentiment.<\/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\">General estimate of customer satisfaction.<\/div>\n          <\/div>\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Average length<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-avg-words\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Average number of words per analyzed review.<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card soft\">\n        <div class=\"ra-card-label\">Tone reading<\/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\">Reputational risk<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-risk\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Volume of negative reviews against the total analyzed.<\/div>\n          <\/div>\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Emotional intensity<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-intensity\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Level of anger, tension or enthusiasm in the reviews.<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card glass-light\">\n        <div class=\"ra-card-label\">Most mentioned topics<\/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\">Detected keywords<\/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\">Detected problems<\/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\">Detected strengths<\/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>Commercial risk<\/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            ai reading\n          <\/span>\n        <\/div>\n        <div class=\"ra-pain-box\">\n          <div class=\"ra-pain-title\">What might be happening<\/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\">Detected pattern<\/div>\n        <div class=\"ra-action-box\">\n          <div class=\"ra-action-title\">Dominant signal<\/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\">First recommended action<\/div>\n        <div class=\"ra-action-box\">\n          <div class=\"ra-action-title\">What I would do now<\/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\">Next steps<\/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 on reputation and visibility<\/div>\n        <div class=\"ra-visual-split\" id=\"rv-visibility-grid\">\n          <div class=\"ra-visual-item\">\n            <div class=\"ra-visual-title\">Customer perception<\/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\">Visibility on platforms<\/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\">Acquiring new reviews<\/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\">Executive summary<\/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            improve your reputation\n          <\/div>\n\n          <div class=\"review-conversion-title\">\n            This analysis is just the beginning\n          <\/div>\n\n          <div class=\"review-conversion-lead\">\n            Spot problems in your reviews, reply with AI and improve your score without wasting hours reading opinions.\n          <\/div>\n\n          <div class=\"review-conversion-text\">\n            You have already seen a sample of how your customers perceive you. With Repscan's review management software you can analyze all your reviews automatically, centralize profiles, reply to opinions with AI, summarize thousands of comments in seconds, group them by topic and protect your score.\n          <\/div>\n\n          <div class=\"review-benefits\">\n            <div class=\"review-benefit\">\u2713 Single dashboard with Google, Trustpilot and other platforms<\/div>\n            <div class=\"review-benefit\">\u2713 Bulk replies to reviews with AI<\/div>\n            <div class=\"review-benefit\">\u2713 Automatic summary of thousands of opinions with AI<\/div>\n            <div class=\"review-benefit\">\u2713 Removal of fake reviews from the platform<\/div>\n            <div class=\"review-benefit\">\u2713 Tags to group reviews by topic<\/div>\n            <div class=\"review-benefit\">\u2713 Free NFC card to boost your reviews<\/div>\n            <div class=\"review-benefit\">\u2713 Improve your local SEO<\/div>\n          <\/div>\n\n          <div class=\"review-cta-row\">\n            <a class=\"review-btn-primary\" href=\"https:\/\/www.repscan.com\/en\/review-management-software\/\">See more software details \u2192<\/a>\n            <a class=\"review-btn-secondary\" href=\"https:\/\/www.repscan.com\/en\/contact-form\/\">Book a demo (10 min.)<\/a>\n          <\/div>\n\n          <div class=\"review-note\">\n            More than 1,200 companies already manage their reviews with Repscan.\n          <\/div>\n\n          <div class=\"review-clients-box\">\n            <div class=\"review-clients-label\">Some brands and organizations that already work with 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        New analysis\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=\"Close\" 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\">Enter your email to see the results<\/div>\n        <div class=\"ra-popup-subtitle\">When you close this window you will be able to see the result on screen.<\/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      ai analyzing\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\">Analyzing reviews<\/div>\n    <div class=\"ra-thinking-text\">The AI is processing sentiment, recurring patterns, risk signals and improvement opportunities.<\/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    'Customer service': ['atenci\u00f3n','atencion','servicio','trato','amable','amables','personal','equipo','trabajadores','empleados','staff','camarero','camarera','camareros','camareras'],\n    'Speed \/ Timeliness':  ['r\u00e1pido','rapido','r\u00e1pida','rapida','lento','lenta','tiempo','tardaron','espera','plazo','puntual','retraso','entrega'],\n    'Quality':             ['calidad','resultado','acabado','trabajo','profesional','profesionales','impecable','detalle','comida','platos','carne','arroz','risotto'],\n    'Price \/ Value':      ['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    'Resolution':          ['problema','problemas','soluci\u00f3n','solucion','resolvieron','arreglaron','solucionaron','incidencia'],\n    'Recommendation':       ['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 + ' characters \u00b7 ' + reviews + ' review' + (reviews !== 1 ? 's' : '') + ' detected' + (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:'Medium', 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:'High', level:'high', score:avg };\n    if (avg >= 1.2) return { label:'Medium', level:'mid', score:avg };\n    return { label:'Low', 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:'High urgency', level:'high' };\n    }\n    if (riskPct >= 8 || score < 6.5) {\n      return { label:'Watch closely', level:'mid' };\n    }\n    return { label:'Stable situation', level:'low' };\n  }\n\n  function getActionForTopic(topic) {\n    if (topic === 'Customer service') return 'Review treatment, response times and how critical reviews are answered.';\n    if (topic === 'Speed \/ Timeliness') return 'Reduce waiting, review load peaks and prioritize recurring incidents.';\n    if (topic === 'Quality') return 'Review the consistency of the product or service and detect recurring failures.';\n    if (topic === 'Price \/ Value') return 'Reinforce the perception of value and capture more recent positive reviews.';\n    if (topic === 'Communication') return 'Improve follow-up, customer messaging and response to incidents.';\n    if (topic === 'Resolution') return 'Close issues before they turn into new negative reviews.';\n    if (topic === 'Recommendation') return 'Leverage satisfied customers to increase recent reviews.';\n    return 'Review this point before it keeps growing.';\n  }\n\n  function getImprovementActions(problemTopics, strengthTopics, riskPct) {\n    var actions = [];\n    if (riskPct >= 15) {\n      actions.push('Reply first to the most negative and the most recent reviews.');\n    } else if (riskPct >= 8) {\n      actions.push('Sort critical reviews by priority and fix the main pattern.');\n    } else {\n      actions.push('Keep weekly monitoring so problems do not gain weight.');\n    }\n\n    problemTopics.forEach(function(item) {\n      actions.push(getActionForTopic(item.topic));\n    });\n\n    if (!problemTopics.length && strengthTopics.length) {\n      actions.push('Boost the detected strengths to capture more positive reviews.');\n    }\n\n    return actions.slice(0,4);\n  }\n\n  function buildSummary(total, pos, neg, neu, score, topTopics) {\n    var mainTone = pos >= neg ? 'mostly positive' : 'with a negative predominance';\n    if (pos === 0 && neg === 0) mainTone = 'neutral';\n    if (neu > pos && neu > neg) mainTone = 'mixed or neutral';\n\n    var topicStr = topTopics.length\n      ? topTopics.slice(0,3).map(function(t){ return '<strong>' + t[0] + '<\/strong>'; }).join(', ')\n      : 'several aspects';\n\n    var verdict = score >= 7 ? 'Overall perception is good.' :\n                  score >= 5 ? 'Perception is mixed.' :\n                               'Perception is negative.';\n\n    return '<strong>' + total + ' reviews<\/strong> have been analyzed. The tone is ' + mainTone +\n           ' (<strong>' + pos + ' positive<\/strong>, ' + neg + ' negative, ' + neu + ' neutral), ' +\n           'with a sentiment score of <strong>' + score + '\/10<\/strong>. ' +\n           'The topics that carry the most weight are ' + topicStr + '. ' + verdict;\n  }\n\n  function buildVisibilityReadings(topTopics, strengthTopics, problemTopics, riskPct) {\n    var perception = 'Reviews are shaping the perception of the business around ' +\n      (topTopics.length ? '<strong>' + topTopics.slice(0,2).map(function(t){ return t[0]; }).join('<\/strong> y <strong>') + '<\/strong>' : 'several topics') + '.';\n\n    var platforms = riskPct >= 12\n      ? 'If negative reviews stay visible and keep repeating, trust drops and the business becomes more vulnerable against other profiles.'\n      : 'The current reading favors a more stable perception, but it is worth keeping a steady flow of recent reviews.';\n\n    var acquisition = strengthTopics.length\n      ? 'The most repeated strengths are <strong>' + strengthTopics.slice(0,2).map(function(t){ return t.topic; }).join('<\/strong> y <strong>') + '<\/strong>. They are the basis for asking for more positive reviews.'\n      : 'You need more repeated positive signals to reinforce trust and attract new favorable reviews.';\n\n    if (problemTopics.length && riskPct >= 15) {\n      acquisition = 'Before asking for more reviews, it is worth fixing <strong>' + problemTopics[0].topic + '<\/strong> so it does not keep generating friction.';\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 += 'There is a high proportion of negative reviews. <strong>That can hold back purchase or contact decisions<\/strong> even if the business has good positive opinions.';\n    } else if (riskPct >= 10) {\n      text += 'There are visible friction signals. <strong>If they are not fixed, they can outweigh favorable reviews<\/strong> and weaken trust.';\n    } else {\n      text += 'The situation does not seem critical, but <strong>letting small recurring problems grow<\/strong> can affect perception over time.';\n    }\n\n    if (problemTopics.length) {\n      text += ' Right now the biggest risk focus is on <strong>' + problemTopics[0].topic + '<\/strong>.';\n    }\n\n    if (intensity.level === 'high') {\n      text += ' In addition, the emotional tone is high, so each critical review has more capacity to damage the perceived image.';\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: 'Critical reviews concentrate on ' + problemTopics[0].topic + ' y ' + problemTopics[1].topic + '.',\n        sub: 'It does not seem an isolated case. There is a recurring pattern worth tackling before it weighs more on overall perception.'\n      };\n    }\n\n    if (problemTopics.length === 1) {\n      return {\n        main: 'The dominant pattern appears in ' + problemTopics[0].topic + '.',\n        sub: 'It is the front most affecting the overall reading of the reviews right now.'\n      };\n    }\n\n    if (strengthTopics.length >= 2) {\n      return {\n        main: 'Positive reviews rely above all on ' + strengthTopics[0].topic + ' y ' + strengthTopics[1].topic + '.',\n        sub: 'Here there is a clear opportunity to ask for more reviews and reinforce the perception of the business.'\n      };\n    }\n\n    return {\n      main: 'There is not yet a sufficiently clear dominant pattern.',\n      sub: 'More volume or more repeated signals are needed to identify more precisely what weighs most.'\n    };\n  }\n\n  function getFirstAction(problemTopics, strengthTopics, riskPct) {\n    if (problemTopics.length) {\n      var main = 'First review ' + problemTopics[0].topic + '.';\n      var sub = getActionForTopic(problemTopics[0].topic);\n\n      if (problemTopics[0].topic === 'Customer service' || problemTopics[0].topic === 'Communication' || problemTopics[0].topic === 'Resolution') {\n        sub += ' Afterwards you can automate part of the follow-up and the replies from the software.';\n      }\n\n      return {\n        main: main,\n        sub: sub,\n        links: [\n          { text:'See management software', url:'https:\/\/www.repscan.com\/en\/review-management-software\/' },\n          { text:'Book a free demo', url:'https:\/\/www.repscan.com\/en\/contact-form\/' }\n        ]\n      };\n    }\n\n    if (strengthTopics.length) {\n      return {\n        main: 'Take advantage of ' + strengthTopics[0].topic + ' to capture more positive reviews.',\n        sub: 'Ask for more recent opinions and keep a constant response to reinforce the perception of the business.',\n        links: [\n          { text:'See management software', url:'https:\/\/www.repscan.com\/en\/review-management-software\/' },\n          { text:'Book a free demo', url:'https:\/\/www.repscan.com\/en\/contact-form\/' }\n        ]\n      };\n    }\n\n    return {\n      main: 'Start by sorting and replying to the most recent reviews.',\n      sub: 'With more volume and monitoring you will see sooner which pattern dominates and which changes to prioritize.',\n      links: [\n        { text:'Reply to reviews with AI', url:'https:\/\/www.repscan.com\/en\/respond-reviews-with-ai\/' },\n        { text:'Book a free demo', url:'https:\/\/www.repscan.com\/en\/contact-form\/' }\n      ]\n    };\n  }\n\n  function getFastRead(score, riskPct, pos, neg, neu) {\n    if (score < 5) {\n      return 'The current reading is <strong>delicate<\/strong>. There is more friction than desirable and it is worth intervening before it keeps growing.';\n    }\n    if (riskPct >= 15) {\n      return 'There are positive reviews, but <strong>the weight of the negative ones is already visible<\/strong> and can condition the decision of new customers.';\n    }\n    if (pos > neg) {\n      return 'Perception is <strong>acceptable or good<\/strong>, although there is still room to improve consistency and capture more favorable opinions.';\n    }\n    return 'The business conveys a <strong>mixed<\/strong> reading. There are good points, but they do not yet weigh enough.';\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 || 'There are not enough signals to expand the reading.') + '<\/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 + ' negative mentions)';\n    });\n\n    var strengthLines = strengthTopics.map(function(item) {\n      return item.topic + ' (' + item.pos + ' positive mentions)';\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 Positive perception' :\n                            score >= 5 ? '\u25c8 Mixed perception' :\n                                         '\u25c6 Negative perception';\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)\">No topics with enough mentions were detected.<\/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)\">No notable keywords.<\/span>';\n    }\n\n    fillList('rv-problems', problemLines, function(item) {\n      return '<strong>' + item + '<\/strong>';\n    }, 'No recurring problems with enough weight are detected.');\n\n    fillList('rv-strengths', strengthLines, function(item) {\n      return '<strong>' + item + '<\/strong>';\n    }, 'There are not yet repeated strengths with enough 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\">Start today with 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\/en\/eshop\/\" id=\"boton-cta-izquierda\" class=\"boton-cta-izquierda\">\n    Get started now\n    <span>\u279c<\/span>\n  <\/a>\n\n  <a href=\"https:\/\/www.repscan.com\/en\/review-management-software\/\" id=\"boton-cta-derecha\" class=\"boton-cta-derecha\" target=\"_blank\" rel=\"noopener noreferrer\">\n    More info\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\">Frequently Asked Questions about the AI review analyzer<\/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\">How exactly does the review analyzer work?<\/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>Our tool uses artificial intelligence trained on the content policies of Google, TripAdvisor and the right to honor regulations. The system scans the text for language patterns, infringement keywords and structures that usually justify a technical or legal takedown.<\/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\">Is the analysis result 100% reliable?<\/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>The analyzer offers a data-based probability estimate. Although it is highly accurate at detecting policy violations (such as spam or offensive language), the final decision always rests with the platform or a judge. What our tool does is tell you whether you have solid arguments to win the case.<\/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\">What do the probability levels mean?<\/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>High<\/strong>: The review clearly breaches the policies (insults, spam, conflict of interest). It is very likely it can be removed.<\/p><p><strong>Medium:<\/strong> There is a grey area. A tailored legal argument is required for the platform to take it down.<\/p><p><strong>Low:<\/strong> The review seems a legitimate opinion protected by freedom of 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\">Are my data or the text of the review stored anywhere?<\/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>No. The analysis is completely private and anonymous. The text you paste is processed in real time to generate the diagnosis and is not stored in any public database nor linked to your business unless you decide to hire the service and provide us with your contact details.<\/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":"Free AI review analyzer: paste your Google or Trustpilot reviews and get sentiment, topics and an executive summary in seconds. No limits, 100% free.","_mbp_gutenberg_autopost":false,"footnotes":""},"class_list":{"0":"post-56543","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>Free AI review analyzer | RepScan<\/title>\n<meta name=\"description\" content=\"Free AI review analyzer: paste your Google or Trustpilot reviews and get sentiment, topics and an executive summary in seconds. No limits, 100% free.\" \/>\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\/en\/ai-review-analyzer\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Free AI review analyzer | RepScan\" \/>\n<meta property=\"og:description\" content=\"Free AI review analyzer: paste your Google or Trustpilot reviews and get sentiment, topics and an executive summary in seconds. No limits, 100% free.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.repscan.com\/en\/ai-review-analyzer\/\" \/>\n<meta property=\"og:site_name\" content=\"RepScan\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-20T10:26:58+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\\\/en\\\/ai-review-analyzer\\\/\",\"url\":\"https:\\\/\\\/www.repscan.com\\\/en\\\/ai-review-analyzer\\\/\",\"name\":\"Free AI review analyzer | RepScan\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.repscan.com\\\/en\\\/#website\"},\"datePublished\":\"2026-06-20T10:23:02+00:00\",\"dateModified\":\"2026-06-20T10:26:58+00:00\",\"description\":\"Free AI review analyzer: paste your Google or Trustpilot reviews and get sentiment, topics and an executive summary in seconds. No limits, 100% free.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.repscan.com\\\/en\\\/ai-review-analyzer\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.repscan.com\\\/en\\\/ai-review-analyzer\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/en\\\/ai-review-analyzer\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.repscan.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Free AI review analyzer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/www.repscan.com\\\/en\\\/\",\"name\":\"RepScan\",\"description\":\"Digital Management Reputation\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.repscan.com\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.repscan.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/en\\\/#organization\",\"name\":\"RepScan\",\"url\":\"https:\\\/\\\/www.repscan.com\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/en\\\/#\\\/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\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Free AI review analyzer | RepScan","description":"Free AI review analyzer: paste your Google or Trustpilot reviews and get sentiment, topics and an executive summary in seconds. No limits, 100% free.","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\/en\/ai-review-analyzer\/","og_locale":"en_US","og_type":"article","og_title":"Free AI review analyzer | RepScan","og_description":"Free AI review analyzer: paste your Google or Trustpilot reviews and get sentiment, topics and an executive summary in seconds. No limits, 100% free.","og_url":"https:\/\/www.repscan.com\/en\/ai-review-analyzer\/","og_site_name":"RepScan","article_modified_time":"2026-06-20T10:26:58+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.repscan.com\/en\/ai-review-analyzer\/","url":"https:\/\/www.repscan.com\/en\/ai-review-analyzer\/","name":"Free AI review analyzer | RepScan","isPartOf":{"@id":"https:\/\/www.repscan.com\/en\/#website"},"datePublished":"2026-06-20T10:23:02+00:00","dateModified":"2026-06-20T10:26:58+00:00","description":"Free AI review analyzer: paste your Google or Trustpilot reviews and get sentiment, topics and an executive summary in seconds. No limits, 100% free.","breadcrumb":{"@id":"https:\/\/www.repscan.com\/en\/ai-review-analyzer\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.repscan.com\/en\/ai-review-analyzer\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.repscan.com\/en\/ai-review-analyzer\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.repscan.com\/en\/"},{"@type":"ListItem","position":2,"name":"Free AI review analyzer"}]},{"@type":"WebSite","@id":"https:\/\/www.repscan.com\/en\/#website","url":"https:\/\/www.repscan.com\/en\/","name":"RepScan","description":"Digital Management Reputation","publisher":{"@id":"https:\/\/www.repscan.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.repscan.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.repscan.com\/en\/#organization","name":"RepScan","url":"https:\/\/www.repscan.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.repscan.com\/en\/#\/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\/en\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.repscan.com\/en\/wp-json\/wp\/v2\/pages\/56543","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.repscan.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.repscan.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.repscan.com\/en\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.repscan.com\/en\/wp-json\/wp\/v2\/comments?post=56543"}],"version-history":[{"count":1,"href":"https:\/\/www.repscan.com\/en\/wp-json\/wp\/v2\/pages\/56543\/revisions"}],"predecessor-version":[{"id":56553,"href":"https:\/\/www.repscan.com\/en\/wp-json\/wp\/v2\/pages\/56543\/revisions\/56553"}],"wp:attachment":[{"href":"https:\/\/www.repscan.com\/en\/wp-json\/wp\/v2\/media?parent=56543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}