{"id":50733,"date":"2026-03-04T10:30:24","date_gmt":"2026-03-04T09:30:24","guid":{"rendered":"https:\/\/www.repscan.com\/?page_id=50733"},"modified":"2026-03-10T18:53:47","modified_gmt":"2026-03-10T17:53:47","slug":"analizador-de-resenas-con-ia","status":"publish","type":"page","link":"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/","title":{"rendered":"Analizador de rese\u00f1as con IA"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"50733\" class=\"elementor 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\">Analizador de rese\u00f1as gratuito con IA<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5014f96 elementor-widget elementor-widget-text-editor\" data-id=\"5014f96\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Pega las rese\u00f1as de tu ficha de Google, Trustpilot o cualquier otra plataforma y obt\u00e9n en segundos un an\u00e1lisis completo:<br \/>Puntuaci\u00f3n de sentimiento, distribuci\u00f3n positiva\/negativa, temas m\u00e1s mencionados y un resumen ejecutivo listo para tomar decisiones.<\/p><p><strong>Sin l\u00edmites. 100% gratuito.<\/strong><\/p><p><strong>Este analizador es una versi\u00f3n simplificada del <a href=\"https:\/\/www.repscan.com\/es\/software-gestion-resenas\/\"><span style=\"text-decoration: underline;\"><span style=\"color: #ff9900; text-decoration: underline;\">Software de gesti\u00f3n de rese\u00f1as.<\/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\/es\/eshop\/#sidebar-triki\" id=\"boton-cta-izquierda\" class=\"boton-cta-izquierda\">\n    Contratar ahora\n    <span>\u279c<\/span>\n  <\/a>\n\n  <a href=\"https:\/\/www.repscan.com\/es\/software-gestion-resenas\/\" id=\"boton-cta-derecha\" class=\"boton-cta-derecha\" target=\"_blank\" rel=\"noopener noreferrer\">\n    M\u00e1s 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 An\u00e1lisis<\/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\">Detecta patrones ocultos<\/div>\n      <div class=\"ben2-desc\">Identifica qu\u00e9 aspectos de tu negocio generan m\u00e1s satisfacci\u00f3n o rechazo entre tus clientes, sin leer cada rese\u00f1a una a una.<\/div>\n      <div class=\"ben2-tag\"><span class=\"ben2-tag-dot\"><\/span>Sentimiento autom\u00e1tico<\/div>\n    <\/div>\n\n    <div class=\"ben2-card\">\n      <div class=\"ben2-number\">02 \u2014 Datos<\/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\">Entiende tu reputaci\u00f3n<\/div>\n      <div class=\"ben2-desc\">Convierte opiniones dispersas en datos estructurados: puntuaci\u00f3n de sentimiento, distribuci\u00f3n y temas clave de un solo vistazo.<\/div>\n      <div class=\"ben2-tag\"><span class=\"ben2-tag-dot\"><\/span>Resumen ejecutivo<\/div>\n    <\/div>\n\n    <div class=\"ben2-card\">\n      <div class=\"ben2-number\">03 \u2014 Velocidad<\/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\">Resultados en segundos<\/div>\n      <div class=\"ben2-desc\">Solo necesitas tu email. Pega tus rese\u00f1as de Google Maps o Trustpilot y obt\u00e9n el an\u00e1lisis completo en segundos.<\/div>\n      <div class=\"ben2-tag\"><span class=\"ben2-tag-dot\"><\/span>An\u00e1lisis instant\u00e1neo<\/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        an\u00e1lisis ia de rese\u00f1as\n      <\/div>\n      <div class=\"ra-input-head-text\">\n        Analiza sentimiento, temas repetidos, riesgos y oportunidades a partir de rese\u00f1as pegadas desde Google, Trustpilot, Tripadvisor u otras plataformas.\n      <\/div>\n    <\/div>\n\n    <div class=\"ra-format-selector\">\n      <div class=\"ra-input-label\" style=\"margin-bottom:0.5rem\"><span><\/span> Fuente de las rese\u00f1as<\/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\">Texto libre<\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"ra-input-label\" style=\"margin-top:1.2rem\"><span><\/span> Pega aqu\u00ed tus rese\u00f1as<\/div>\n    <textarea id=\"rv-input\" placeholder=\"Pega una o varias rese\u00f1as copiadas directamente de Google Maps, Trustpilot, Tripadvisor u otras plataformas.\"><\/textarea>\n\n    <div class=\"ra-input-footer\">\n      <span class=\"ra-char-count\" id=\"rv-chars\">0 caracteres \u00b7 0 rese\u00f1as detectadas<\/span>\n      <span class=\"ra-hint-text\">Ctrl+Enter para analizar<\/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        Analizar rese\u00f1as\n      <\/button>\n\n      <button class=\"ra-btn-clear\" id=\"rv-clear\" type=\"button\">\n        Borrar\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>Sentimiento general<\/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                an\u00e1lisis ia\n              <\/span>\n            <\/div>\n\n            <div class=\"ra-score-main\">\n              <span class=\"ra-score-num\" id=\"rv-score-num\">\u2014<\/span>\n              <span class=\"ra-score-denom\">\/10<\/span>\n            <\/div>\n\n            <div class=\"ra-score-bar-wrap\" style=\"margin-top:0.7rem;\">\n              <div class=\"ra-score-bar-track\">\n                <div class=\"ra-score-bar-fill\" id=\"rv-score-bar\"><\/div>\n              <\/div>\n              <div class=\"ra-score-verdict\" id=\"rv-score-verdict\">\u2014<\/div>\n            <\/div>\n\n            <div class=\"ra-stars-wrap\">\n              <div class=\"ra-stars\" id=\"rv-stars\">\n                <span class=\"star\">\u2605<\/span>\n                <span class=\"star\">\u2605<\/span>\n                <span class=\"star\">\u2605<\/span>\n                <span class=\"star\">\u2605<\/span>\n                <span class=\"star\">\u2605<\/span>\n              <\/div>\n              <div class=\"ra-stars-meta\">\n                Nota estimada visible en plataformas <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\">Lectura r\u00e1pida<\/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\">Satisfacci\u00f3n<\/div>\n              <div class=\"ra-side-kpi-value\" id=\"rv-satisfaction-inline\">\u2014<\/div>\n              <div class=\"ra-side-kpi-text\">Lectura general de satisfacci\u00f3n percibida.<\/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\">Riesgo<\/div>\n              <div class=\"ra-side-kpi-value\" id=\"rv-risk-inline\">\u2014<\/div>\n              <div class=\"ra-side-kpi-text\">Peso de rese\u00f1as negativas sobre el total analizado.<\/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\">Intensidad<\/div>\n              <div class=\"ra-side-kpi-value\" id=\"rv-intensity-inline\">\u2014<\/div>\n              <div class=\"ra-side-kpi-text\">Carga emocional detectada en las opiniones.<\/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\">Distribuci\u00f3n<\/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\">Positivas<\/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\">Neutras<\/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\">Negativas<\/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\">Indicadores de negocio<\/div>\n        <div class=\"ra-metrics-grid\">\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Nota estimada<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-rating-est\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Lectura estimada sobre 5 a partir del sentimiento detectado.<\/div>\n          <\/div>\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Satisfacci\u00f3n<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-satisfaction\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Estimaci\u00f3n general de satisfacci\u00f3n de clientes.<\/div>\n          <\/div>\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Longitud media<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-avg-words\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Media de palabras por rese\u00f1a analizada.<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card soft\">\n        <div class=\"ra-card-label\">Lectura del tono<\/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\">Riesgo reputacional<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-risk\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Volumen de rese\u00f1as negativas frente al total analizado.<\/div>\n          <\/div>\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Intensidad emocional<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-intensity\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Nivel de enfado, tensi\u00f3n o entusiasmo en las rese\u00f1as.<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card glass-light\">\n        <div class=\"ra-card-label\">Temas m\u00e1s mencionados<\/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\">Palabras clave detectadas<\/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\">Problemas detectados<\/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\">Fortalezas detectadas<\/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>Riesgo comercial<\/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            lectura ia\n          <\/span>\n        <\/div>\n        <div class=\"ra-pain-box\">\n          <div class=\"ra-pain-title\">Qu\u00e9 puede estar pasando<\/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\">Patr\u00f3n detectado<\/div>\n        <div class=\"ra-action-box\">\n          <div class=\"ra-action-title\">Se\u00f1al dominante<\/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\">Primera acci\u00f3n recomendada<\/div>\n        <div class=\"ra-action-box\">\n          <div class=\"ra-action-title\">Qu\u00e9 har\u00eda ahora<\/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\">Siguientes pasos<\/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\">Impacto en reputaci\u00f3n y visibilidad<\/div>\n        <div class=\"ra-visual-split\" id=\"rv-visibility-grid\">\n          <div class=\"ra-visual-item\">\n            <div class=\"ra-visual-title\">Percepci\u00f3n del cliente<\/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\">Visibilidad en plataformas<\/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\">Captaci\u00f3n de nuevas rese\u00f1as<\/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\">Resumen ejecutivo<\/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            mejora tu reputaci\u00f3n\n          <\/div>\n\n          <div class=\"review-conversion-title\">\n            Este an\u00e1lisis es solo el principio\n          <\/div>\n\n          <div class=\"review-conversion-lead\">\n            Detecta problemas en tus rese\u00f1as, responde con IA y mejora tu puntuaci\u00f3n sin perder horas leyendo opiniones.\n          <\/div>\n\n          <div class=\"review-conversion-text\">\n            Ya has visto una muestra de c\u00f3mo te perciben tus clientes. Con el software de gesti\u00f3n de rese\u00f1as de Repscan puedes analizar todas tus rese\u00f1as autom\u00e1ticamente, centralizar perfiles, responder opiniones con IA, resumir miles de comentarios en segundos, agruparlos por temas y proteger tu puntuaci\u00f3n.\n          <\/div>\n\n          <div class=\"review-benefits\">\n            <div class=\"review-benefit\">\u2713 Panel \u00fanico con Google, Trustpilot y otras plataformas<\/div>\n            <div class=\"review-benefit\">\u2713 Respuestas masivas a rese\u00f1as con IA<\/div>\n            <div class=\"review-benefit\">\u2713 Resumen autom\u00e1tico de miles de opiniones con IA<\/div>\n            <div class=\"review-benefit\">\u2713 Eliminaci\u00f3n de rese\u00f1as falsas desde la plataforma<\/div>\n            <div class=\"review-benefit\">\u2713 Etiquetas para agrupar rese\u00f1as por temas<\/div>\n            <div class=\"review-benefit\">\u2713 Tarjeta NFC gratuita para aumentar tus rese\u00f1as<\/div>\n            <div class=\"review-benefit\">\u2713 Mejora tu SEO local<\/div>\n          <\/div>\n\n          <div class=\"review-cta-row\">\n            <a class=\"review-btn-primary\" href=\"https:\/\/www.repscan.com\/es\/software-gestion-resenas\/\">Ver m\u00e1s detalles del software \u2192<\/a>\n            <a class=\"review-btn-secondary\" href=\"https:\/\/www.repscan.com\/es\/formulario-contacto-saas\/\">Reservar demo (10 min.)<\/a>\n          <\/div>\n\n          <div class=\"review-note\">\n            M\u00e1s de 1.200 empresas ya gestionan sus rese\u00f1as con Repscan.\n          <\/div>\n\n          <div class=\"review-clients-box\">\n            <div class=\"review-clients-label\">Algunas marcas y entidades que ya trabajan con 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        Nuevo an\u00e1lisis\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=\"Cerrar\" 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\">Introduce tu email para ver los resultados<\/div>\n        <div class=\"ra-popup-subtitle\">Al cerrar esta ventana podr\u00e1s ver el resultado en pantalla.<\/div>\n      <\/div>\n    <\/div>\n    <div class=\"ra-popup-form-wrap\">\n      <iframe\n        id=\"ra-zoho-iframe\"\n        aria-label=\"ESP_ZOHO_FORM_ANALIZADOR-RESE\u00d1AS\"\n        frameborder=\"0\"\n        style=\"height:512px;width:100%;border:none;display:block;\"\n        src=\"https:\/\/forms.zohopublic.eu\/repscan\/form\/ESPZOHOFORMANALIZADORRESEAS\/formperma\/qGr0WukXeJUQvbPwtarPP02xQxci0L-3QdAeuD1PXLU\">\n      <\/iframe>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- POPUP ANALIZANDO -->\n<div class=\"ra-thinking-overlay\" id=\"ra-thinking-overlay\" aria-hidden=\"true\">\n  <div class=\"ra-thinking-box\">\n    <div class=\"ra-thinking-ai-chip\">\n      <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3l1.9 4.6L18 9.5l-4.1 1.9L12 16l-1.9-4.6L6 9.5l4.1-1.9L12 3z\"><\/path><\/svg>\n      ia en an\u00e1lisis\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\">Analizando rese\u00f1as<\/div>\n    <div class=\"ra-thinking-text\">La IA est\u00e1 procesando sentimiento, patrones repetidos, se\u00f1ales de riesgo y oportunidades de mejora.<\/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    'Atenci\u00f3n al cliente': ['atenci\u00f3n','atencion','servicio','trato','amable','amables','personal','equipo','trabajadores','empleados','staff','camarero','camarera','camareros','camareras'],\n    'Velocidad \/ Plazos':  ['r\u00e1pido','rapido','r\u00e1pida','rapida','lento','lenta','tiempo','tardaron','espera','plazo','puntual','retraso','entrega'],\n    'Calidad':             ['calidad','resultado','acabado','trabajo','profesional','profesionales','impecable','detalle','comida','platos','carne','arroz','risotto'],\n    'Precio \/ Valor':      ['precio','caro','cara','barato','barata','coste','costo','dinero','econ\u00f3mico','economico','valor','40-50','50','\u20ac'],\n    'Comunicaci\u00f3n':        ['comunicaci\u00f3n','comunicacion','informaci\u00f3n','informacion','respuesta','responden','contacto','email','llamada','whatsapp'],\n    'Resoluci\u00f3n':          ['problema','problemas','soluci\u00f3n','solucion','resolvieron','arreglaron','solucionaron','incidencia'],\n    'Recomendaci\u00f3n':       ['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 + ' caracteres \u00b7 ' + reviews + ' rese\u00f1a' + (reviews !== 1 ? 's' : '') + ' detectada' + (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:'Media', 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:'Alta', level:'high', score:avg };\n    if (avg >= 1.2) return { label:'Media', level:'mid', score:avg };\n    return { label:'Baja', 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:'Urgencia alta', level:'high' };\n    }\n    if (riskPct >= 8 || score < 6.5) {\n      return { label:'Vigilar de cerca', level:'mid' };\n    }\n    return { label:'Situaci\u00f3n estable', level:'low' };\n  }\n\n  function getActionForTopic(topic) {\n    if (topic === 'Atenci\u00f3n al cliente') return 'Revisar trato, tiempos de respuesta y c\u00f3mo se contestan las rese\u00f1as cr\u00edticas.';\n    if (topic === 'Velocidad \/ Plazos') return 'Reducir espera, revisar picos de carga y priorizar incidencias repetidas.';\n    if (topic === 'Calidad') return 'Revisar consistencia del producto o servicio y detectar fallos repetidos.';\n    if (topic === 'Precio \/ Valor') return 'Reforzar percepci\u00f3n de valor y captar m\u00e1s rese\u00f1as positivas recientes.';\n    if (topic === 'Comunicaci\u00f3n') return 'Mejorar seguimiento, mensajes al cliente y respuesta ante incidencias.';\n    if (topic === 'Resoluci\u00f3n') return 'Cerrar problemas antes de que se conviertan en nuevas rese\u00f1as negativas.';\n    if (topic === 'Recomendaci\u00f3n') return 'Aprovechar clientes satisfechos para aumentar rese\u00f1as recientes.';\n    return 'Revisar este punto antes de que siga creciendo.';\n  }\n\n  function getImprovementActions(problemTopics, strengthTopics, riskPct) {\n    var actions = [];\n    if (riskPct >= 15) {\n      actions.push('Responder primero las rese\u00f1as m\u00e1s negativas y las m\u00e1s recientes.');\n    } else if (riskPct >= 8) {\n      actions.push('Ordenar las rese\u00f1as cr\u00edticas por prioridad y corregir el patr\u00f3n principal.');\n    } else {\n      actions.push('Mantener seguimiento semanal para que los problemas no ganen peso.');\n    }\n\n    problemTopics.forEach(function(item) {\n      actions.push(getActionForTopic(item.topic));\n    });\n\n    if (!problemTopics.length && strengthTopics.length) {\n      actions.push('Potenciar los puntos fuertes detectados para captar m\u00e1s rese\u00f1as positivas.');\n    }\n\n    return actions.slice(0,4);\n  }\n\n  function buildSummary(total, pos, neg, neu, score, topTopics) {\n    var mainTone = pos >= neg ? 'mayoritariamente positivo' : 'con predominio negativo';\n    if (pos === 0 && neg === 0) mainTone = 'neutro';\n    if (neu > pos && neu > neg) mainTone = 'mixto o neutral';\n\n    var topicStr = topTopics.length\n      ? topTopics.slice(0,3).map(function(t){ return '<strong>' + t[0] + '<\/strong>'; }).join(', ')\n      : 'varios aspectos';\n\n    var verdict = score >= 7 ? 'La percepci\u00f3n general es buena.' :\n                  score >= 5 ? 'La percepci\u00f3n es mixta.' :\n                               'La percepci\u00f3n es negativa.';\n\n    return 'Se han analizado <strong>' + total + ' rese\u00f1as<\/strong>. El tono es ' + mainTone +\n           ' (<strong>' + pos + ' positivas<\/strong>, ' + neg + ' negativas, ' + neu + ' neutras), ' +\n           'con una puntuaci\u00f3n de sentimiento de <strong>' + score + '\/10<\/strong>. ' +\n           'Los temas que m\u00e1s pesan son ' + topicStr + '. ' + verdict;\n  }\n\n  function buildVisibilityReadings(topTopics, strengthTopics, problemTopics, riskPct) {\n    var perception = 'Las rese\u00f1as est\u00e1n moldeando la percepci\u00f3n del negocio alrededor de ' +\n      (topTopics.length ? '<strong>' + topTopics.slice(0,2).map(function(t){ return t[0]; }).join('<\/strong> y <strong>') + '<\/strong>' : 'varios temas') + '.';\n\n    var platforms = riskPct >= 12\n      ? 'Si las rese\u00f1as negativas siguen visibles y se repiten, la confianza baja y el negocio se vuelve m\u00e1s vulnerable frente a otros perfiles.'\n      : 'La lectura actual favorece una percepci\u00f3n m\u00e1s estable, pero conviene mantener un flujo constante de rese\u00f1as recientes.';\n\n    var acquisition = strengthTopics.length\n      ? 'Los puntos fuertes m\u00e1s repetidos son <strong>' + strengthTopics.slice(0,2).map(function(t){ return t.topic; }).join('<\/strong> y <strong>') + '<\/strong>. Son la base para pedir m\u00e1s rese\u00f1as positivas.'\n      : 'Necesitas m\u00e1s se\u00f1ales positivas repetidas para reforzar confianza y atraer nuevas rese\u00f1as favorables.';\n\n    if (problemTopics.length && riskPct >= 15) {\n      acquisition = 'Antes de pedir m\u00e1s rese\u00f1as, conviene corregir <strong>' + problemTopics[0].topic + '<\/strong> para que no siga generando fricci\u00f3n.';\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 += 'Hay una proporci\u00f3n alta de rese\u00f1as negativas. <strong>Eso puede frenar decisiones de compra o contacto<\/strong> aunque el negocio tenga buenas opiniones positivas.';\n    } else if (riskPct >= 10) {\n      text += 'Hay se\u00f1ales de fricci\u00f3n visibles. <strong>Si no se corrigen, pueden pesar m\u00e1s que las rese\u00f1as favorables<\/strong> y debilitar la confianza.';\n    } else {\n      text += 'La situaci\u00f3n no parece cr\u00edtica, pero <strong>dejar crecer peque\u00f1os problemas repetidos<\/strong> puede afectar la percepci\u00f3n con el tiempo.';\n    }\n\n    if (problemTopics.length) {\n      text += ' Ahora mismo el mayor foco de riesgo est\u00e1 en <strong>' + problemTopics[0].topic + '<\/strong>.';\n    }\n\n    if (intensity.level === 'high') {\n      text += ' Adem\u00e1s, el tono emocional es alto, as\u00ed que cada rese\u00f1a cr\u00edtica tiene m\u00e1s capacidad de da\u00f1ar la imagen percibida.';\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: 'Las rese\u00f1as cr\u00edticas se concentran en ' + problemTopics[0].topic + ' y ' + problemTopics[1].topic + '.',\n        sub: 'No parece un caso aislado. Hay un patr\u00f3n repetido que conviene atacar antes de que pese m\u00e1s en la percepci\u00f3n global.'\n      };\n    }\n\n    if (problemTopics.length === 1) {\n      return {\n        main: 'El patr\u00f3n dominante aparece en ' + problemTopics[0].topic + '.',\n        sub: 'Es el frente que m\u00e1s est\u00e1 afectando ahora mismo la lectura general de las rese\u00f1as.'\n      };\n    }\n\n    if (strengthTopics.length >= 2) {\n      return {\n        main: 'Las rese\u00f1as positivas se apoyan sobre todo en ' + strengthTopics[0].topic + ' y ' + strengthTopics[1].topic + '.',\n        sub: 'Aqu\u00ed hay una oportunidad clara para pedir m\u00e1s rese\u00f1as y reforzar la percepci\u00f3n del negocio.'\n      };\n    }\n\n    return {\n      main: 'Todav\u00eda no hay un patr\u00f3n dominante suficientemente claro.',\n      sub: 'Hace falta m\u00e1s volumen o m\u00e1s se\u00f1ales repetidas para identificar con m\u00e1s precisi\u00f3n qu\u00e9 pesa m\u00e1s.'\n    };\n  }\n\n  function getFirstAction(problemTopics, strengthTopics, riskPct) {\n    if (problemTopics.length) {\n      var main = 'Revisa primero ' + problemTopics[0].topic + '.';\n      var sub = getActionForTopic(problemTopics[0].topic);\n\n      if (problemTopics[0].topic === 'Atenci\u00f3n al cliente' || problemTopics[0].topic === 'Comunicaci\u00f3n' || problemTopics[0].topic === 'Resoluci\u00f3n') {\n        sub += ' Despu\u00e9s puedes automatizar parte del seguimiento y las respuestas desde el software.';\n      }\n\n      return {\n        main: main,\n        sub: sub,\n        links: [\n          { text:'Ver software de gesti\u00f3n', url:'https:\/\/www.repscan.com\/es\/software-gestion-resenas\/' },\n          { text:'Reservar demo gratis', url:'https:\/\/www.repscan.com\/es\/formulario-contacto-saas\/' }\n        ]\n      };\n    }\n\n    if (strengthTopics.length) {\n      return {\n        main: 'Aprovecha ' + strengthTopics[0].topic + ' para captar m\u00e1s rese\u00f1as positivas.',\n        sub: 'Pide m\u00e1s opiniones recientes y mant\u00e9n respuesta constante para reforzar la percepci\u00f3n del negocio.',\n        links: [\n          { text:'Ver software de gesti\u00f3n', url:'https:\/\/www.repscan.com\/es\/software-gestion-resenas\/' },\n          { text:'Reservar demo gratis', url:'https:\/\/www.repscan.com\/es\/formulario-contacto-saas\/' }\n        ]\n      };\n    }\n\n    return {\n      main: 'Empieza por ordenar y responder las rese\u00f1as m\u00e1s recientes.',\n      sub: 'Con m\u00e1s volumen y seguimiento ver\u00e1s antes qu\u00e9 patr\u00f3n domina y qu\u00e9 cambios conviene priorizar.',\n      links: [\n        { text:'Responder rese\u00f1as con IA', url:'https:\/\/www.repscan.com\/es\/responder-resenas-ia\/' },\n        { text:'Reservar demo gratis', url:'https:\/\/www.repscan.com\/es\/formulario-contacto-saas\/' }\n      ]\n    };\n  }\n\n  function getFastRead(score, riskPct, pos, neg, neu) {\n    if (score < 5) {\n      return 'La lectura actual es <strong>delicada<\/strong>. Hay m\u00e1s fricci\u00f3n de la deseable y conviene intervenir antes de que siga creciendo.';\n    }\n    if (riskPct >= 15) {\n      return 'Hay rese\u00f1as positivas, pero <strong>el peso de las negativas ya es visible<\/strong> y puede condicionar la decisi\u00f3n de nuevos clientes.';\n    }\n    if (pos > neg) {\n      return 'La percepci\u00f3n es <strong>aceptable o buena<\/strong>, aunque todav\u00eda hay margen para mejorar consistencia y captar m\u00e1s opiniones favorables.';\n    }\n    return 'El negocio transmite una lectura <strong>mixta<\/strong>. Hay puntos buenos, pero a\u00fan no pesan lo suficiente.';\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 || 'No hay suficientes se\u00f1ales para ampliar la lectura.') + '<\/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 + ' menciones negativas)';\n    });\n\n    var strengthLines = strengthTopics.map(function(item) {\n      return item.topic + ' (' + item.pos + ' menciones positivas)';\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 Percepci\u00f3n positiva' :\n                            score >= 5 ? '\u25c8 Percepci\u00f3n mixta' :\n                                         '\u25c6 Percepci\u00f3n negativa';\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 se detectaron temas con suficientes menciones.<\/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)\">Sin palabras clave destacadas.<\/span>';\n    }\n\n    fillList('rv-problems', problemLines, function(item) {\n      return '<strong>' + item + '<\/strong>';\n    }, 'No se detectan problemas repetidos con suficiente peso.');\n\n    fillList('rv-strengths', strengthLines, function(item) {\n      return '<strong>' + item + '<\/strong>';\n    }, 'Todav\u00eda no hay fortalezas repetidas con suficiente se\u00f1al.');\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\">Empieza hoy mismo con 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\/es\/eshop\/\" id=\"boton-cta-izquierda\" class=\"boton-cta-izquierda\">\n    Contratar ahora\n    <span>\u279c<\/span>\n  <\/a>\n\n  <a href=\"https:\/\/www.repscan.com\/es\/software-gestion-resenas\/\" id=\"boton-cta-derecha\" class=\"boton-cta-derecha\" target=\"_blank\" rel=\"noopener noreferrer\">\n    M\u00e1s 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\">Preguntas Frecuentes sobr el analizador de rese\u00f1as con IA<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-6bbb3aa4\" data-id=\"6bbb3aa4\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<div class=\"elementor-element elementor-element-5ae4134 elementor-widget elementor-widget-toggle\" data-id=\"5ae4134\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"toggle.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle\">\n\t\t\t\t\t\t\t<div class=\"elementor-toggle-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-9531\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-9531\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon elementor-toggle-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-closed\"><i class=\"fas fa-angle-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-toggle-icon-opened\"><i class=\"elementor-toggle-icon-opened fas fa-chevron-down\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-toggle-title\" tabindex=\"0\">\u00bfC\u00f3mo funciona exactamente el analizador de rese\u00f1as?<\/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>Nuestra herramienta utiliza inteligencia artificial entrenada con las pol\u00edticas de contenido de Google, TripAdvisor y normativa de derecho al honor. El sistema escanea el texto en busca de patrones de lenguaje, palabras clave de infracci\u00f3n y estructuras que suelen justificar una retirada t\u00e9cnica o legal.<\/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\">\u00bfEs 100% fiable el resultado del an\u00e1lisis?<\/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>El analizador ofrece una estimaci\u00f3n de probabilidad basada en datos. Aunque tiene una precisi\u00f3n alt\u00edsima detectando infracciones de pol\u00edtica (como spam o lenguaje ofensivo), la decisi\u00f3n final siempre recae en la plataforma o en un juez. Lo que hace nuestra herramienta es decirte si tienes argumentos s\u00f3lidos para ganar el caso.<\/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\">\u00bfQu\u00e9 significan los niveles de probabilidad?<\/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>Alta<\/strong>: La rese\u00f1a infringe claramente las pol\u00edticas (insultos, spam, conflicto de intereses). Es muy probable que se pueda eliminar.<\/p><p><strong>Media:<\/strong> Existe una zona gris. Se requiere una argumentaci\u00f3n legal personalizada para que la plataforma la retire.<\/p><p><strong>Baja:<\/strong> La rese\u00f1a parece una opini\u00f3n leg\u00edtima protegida por la libertad de expresi\u00f3n.<\/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\">\u00bfMis datos o el texto de la rese\u00f1a se guardan en alg\u00fan sitio?<\/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. El an\u00e1lisis es totalmente privado y an\u00f3nimo. El texto que pegas se procesa en tiempo real para generar el diagn\u00f3stico y no se almacena en ninguna base de datos p\u00fablica ni se vincula a tu negocio a menos que decidas contratar el servicio y nos proporciones tus datos de contacto.<\/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":{"_mbp_gutenberg_autopost":false,"footnotes":""},"class_list":{"0":"post-50733","1":"page","2":"type-page","3":"status-publish","5":"infinite-scroll-item"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Analizador de rese\u00f1as con IA | RepScan<\/title>\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\/es\/analizador-de-resenas-con-ia\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Analizador de rese\u00f1as con IA | RepScan\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/\" \/>\n<meta property=\"og:site_name\" content=\"RepScan\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-10T17:53:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/04\/logo-asociacion-violencia-digital.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/\",\"url\":\"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/\",\"name\":\"Analizador de rese\u00f1as con IA | RepScan\",\"isPartOf\":{\"@id\":\"https:\/\/www.repscan.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/04\/logo-asociacion-violencia-digital.png\",\"datePublished\":\"2026-03-04T09:30:24+00:00\",\"dateModified\":\"2026-03-10T17:53:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/#primaryimage\",\"url\":\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/04\/logo-asociacion-violencia-digital.png\",\"contentUrl\":\"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/04\/logo-asociacion-violencia-digital.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.repscan.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Analizador de rese\u00f1as con IA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.repscan.com\/es\/#website\",\"url\":\"https:\/\/www.repscan.com\/es\/\",\"name\":\"RepScan\",\"description\":\"Plataforma de Reputaci\u00f3n Digital\",\"publisher\":{\"@id\":\"https:\/\/www.repscan.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.repscan.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.repscan.com\/es\/#organization\",\"name\":\"RepScan\",\"url\":\"https:\/\/www.repscan.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.repscan.com\/es\/#\/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\/es\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Analizador de rese\u00f1as con IA | RepScan","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\/es\/analizador-de-resenas-con-ia\/","og_locale":"es_ES","og_type":"article","og_title":"Analizador de rese\u00f1as con IA | RepScan","og_url":"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/","og_site_name":"RepScan","article_modified_time":"2026-03-10T17:53:47+00:00","og_image":[{"url":"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/04\/logo-asociacion-violencia-digital.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Tiempo de lectura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/","url":"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/","name":"Analizador de rese\u00f1as con IA | RepScan","isPartOf":{"@id":"https:\/\/www.repscan.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/#primaryimage"},"image":{"@id":"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/#primaryimage"},"thumbnailUrl":"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/04\/logo-asociacion-violencia-digital.png","datePublished":"2026-03-04T09:30:24+00:00","dateModified":"2026-03-10T17:53:47+00:00","breadcrumb":{"@id":"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/#primaryimage","url":"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/04\/logo-asociacion-violencia-digital.png","contentUrl":"https:\/\/www.repscan.com\/wp-content\/uploads\/2025\/04\/logo-asociacion-violencia-digital.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.repscan.com\/es\/analizador-de-resenas-con-ia\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.repscan.com\/es\/"},{"@type":"ListItem","position":2,"name":"Analizador de rese\u00f1as con IA"}]},{"@type":"WebSite","@id":"https:\/\/www.repscan.com\/es\/#website","url":"https:\/\/www.repscan.com\/es\/","name":"RepScan","description":"Plataforma de Reputaci\u00f3n Digital","publisher":{"@id":"https:\/\/www.repscan.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.repscan.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/www.repscan.com\/es\/#organization","name":"RepScan","url":"https:\/\/www.repscan.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.repscan.com\/es\/#\/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\/es\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.repscan.com\/es\/wp-json\/wp\/v2\/pages\/50733","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.repscan.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.repscan.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.repscan.com\/es\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.repscan.com\/es\/wp-json\/wp\/v2\/comments?post=50733"}],"version-history":[{"count":0,"href":"https:\/\/www.repscan.com\/es\/wp-json\/wp\/v2\/pages\/50733\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.repscan.com\/es\/wp-json\/wp\/v2\/media?parent=50733"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}