{"id":56546,"date":"2026-06-20T12:23:17","date_gmt":"2026-06-20T10:23:17","guid":{"rendered":"https:\/\/www.repscan.com\/analisador-avaliacoes-ia\/"},"modified":"2026-06-20T12:42:09","modified_gmt":"2026-06-20T10:42:09","slug":"analisador-avaliacoes-ia","status":"publish","type":"page","link":"https:\/\/www.repscan.com\/pt-pt\/analisador-avaliacoes-ia\/","title":{"rendered":"Analisador de avalia\u00e7\u00f5es gratuito com IA"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"56546\" class=\"elementor elementor-56546 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\">Analisador de avalia\u00e7\u00f5es gratuito com 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>Cola as avalia\u00e7\u00f5es da tua ficha do Google, Trustpilot ou de qualquer outra plataforma e obt\u00e9m em segundos uma an\u00e1lise completa:<br \/>Pontua\u00e7\u00e3o de sentimento, distribui\u00e7\u00e3o positiva\/negativa, temas mais mencionados e um resumo executivo pronto para tomar decis\u00f5es.<\/p><p><strong>Sem limites. 100% gratuito.<\/strong><\/p><p><strong>Este analisador \u00e9 uma vers\u00e3o simplificada do <a href=\"https:\/\/www.repscan.com\/pt-pt\/software-gestao-avaliacoes\/\"><span style=\"text-decoration: underline;\"><span style=\"color: #ff9900; text-decoration: underline;\">Software de gest\u00e3o de avalia\u00e7\u00f5es.<\/span><\/span><\/a><\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1c85f83 elementor-widget elementor-widget-html\" data-id=\"1c85f83\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div style=\"justify-content: center\" class=\"botones\">\n  <a href=\"https:\/\/www.repscan.com\/en\/eshop\/#sidebar-triki\" id=\"boton-cta-izquierda\" class=\"boton-cta-izquierda\">\n    Contratar agora\n    <span>\u279c<\/span>\n  <\/a>\n\n  <a href=\"https:\/\/www.repscan.com\/pt-pt\/software-gestao-avaliacoes\/\" id=\"boton-cta-derecha\" class=\"boton-cta-derecha\" target=\"_blank\" rel=\"noopener noreferrer\">\n    Mais 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\u00e1lise<\/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\">Deteta padr\u00f5es ocultos<\/div>\n      <div class=\"ben2-desc\">Identifica quais aspetos do teu neg\u00f3cio geram mais satisfa\u00e7\u00e3o ou rejei\u00e7\u00e3o entre os teus clientes, sem ler cada avalia\u00e7\u00e3o uma a uma.<\/div>\n      <div class=\"ben2-tag\"><span class=\"ben2-tag-dot\"><\/span>Sentimento autom\u00e1tico<\/div>\n    <\/div>\n\n    <div class=\"ben2-card\">\n      <div class=\"ben2-number\">02 \u2014 Dados<\/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\">Compreende a tua reputa\u00e7\u00e3o<\/div>\n      <div class=\"ben2-desc\">Transforma opini\u00f5es dispersas em dados estruturados: pontua\u00e7\u00e3o de sentimento, distribui\u00e7\u00e3o e temas-chave num s\u00f3 relance.<\/div>\n      <div class=\"ben2-tag\"><span class=\"ben2-tag-dot\"><\/span>Resumo executivo<\/div>\n    <\/div>\n\n    <div class=\"ben2-card\">\n      <div class=\"ben2-number\">03 \u2014 Velocidade<\/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 em segundos<\/div>\n      <div class=\"ben2-desc\">S\u00f3 precisas do teu email. Cola as tuas avalia\u00e7\u00f5es do Google Maps ou Trustpilot e obt\u00e9m a an\u00e1lise completa em segundos.<\/div>\n      <div class=\"ben2-tag\"><span class=\"ben2-tag-dot\"><\/span>An\u00e1lise instant\u00e2nea<\/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\u00e1lise ia de avalia\u00e7\u00f5es\n      <\/div>\n      <div class=\"ra-input-head-text\">\n        Analisa sentimento, temas recorrentes, riscos e oportunidades a partir de avalia\u00e7\u00f5es coladas do Google, Trustpilot, Tripadvisor ou outras 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> Fonte das avalia\u00e7\u00f5es<\/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 livre<\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"ra-input-label\" style=\"margin-top:1.2rem\"><span><\/span> Cola aqui as tuas avalia\u00e7\u00f5es<\/div>\n    <textarea id=\"rv-input\" placeholder=\"Cola uma ou v\u00e1rias avalia\u00e7\u00f5es copiadas diretamente do Google Maps, Trustpilot, Tripadvisor ou outras plataformas.\"><\/textarea>\n\n    <div class=\"ra-input-footer\">\n      <span class=\"ra-char-count\" id=\"rv-chars\">0 caracteres \u00b7 0 avalia\u00e7\u00f5es detetadas<\/span>\n      <span class=\"ra-hint-text\">Ctrl+Enter para analisar<\/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        Analisar avalia\u00e7\u00f5es\n      <\/button>\n\n      <button class=\"ra-btn-clear\" id=\"rv-clear\" type=\"button\">\n        Limpar\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>Sentimento geral<\/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\u00e1lise 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 vis\u00edvel nas 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\">Leitura 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\">Satisfa\u00e7\u00e3o<\/div>\n              <div class=\"ra-side-kpi-value\" id=\"rv-satisfaction-inline\">\u2014<\/div>\n              <div class=\"ra-side-kpi-text\">Leitura geral da satisfa\u00e7\u00e3o percebida.<\/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\">Risco<\/div>\n              <div class=\"ra-side-kpi-value\" id=\"rv-risk-inline\">\u2014<\/div>\n              <div class=\"ra-side-kpi-text\">Peso das avalia\u00e7\u00f5es negativas sobre o total analisado.<\/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\">Intensidade<\/div>\n              <div class=\"ra-side-kpi-value\" id=\"rv-intensity-inline\">\u2014<\/div>\n              <div class=\"ra-side-kpi-text\">Carga emocional detetada nas opini\u00f5es.<\/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\">Distribui\u00e7\u00e3o<\/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 neg\u00f3cio<\/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\">Leitura estimada sobre 5 a partir do sentimento detetado.<\/div>\n          <\/div>\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Satisfa\u00e7\u00e3o<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-satisfaction\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Estimativa geral de satisfa\u00e7\u00e3o de clientes.<\/div>\n          <\/div>\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Comprimento m\u00e9dio<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-avg-words\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">M\u00e9dia de palavras por avalia\u00e7\u00e3o analisada.<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card soft\">\n        <div class=\"ra-card-label\">Leitura do tom<\/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\">Risco reputacional<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-risk\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Volume de avalia\u00e7\u00f5es negativas face ao total analisado.<\/div>\n          <\/div>\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Intensidadee emocional<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-intensity\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">N\u00edvel de irrita\u00e7\u00e3o, tens\u00e3o ou entusiasmo nas avalia\u00e7\u00f5es.<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card glass-light\">\n        <div class=\"ra-card-label\">Temas mais 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\">Palavras-chave detetadas<\/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 detetados<\/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\">Pontos fortes detetados<\/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>Risco 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            leitura ia\n          <\/span>\n        <\/div>\n        <div class=\"ra-pain-box\">\n          <div class=\"ra-pain-title\">O que pode estar a acontecer<\/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\">Padr\u00e3o detetado<\/div>\n        <div class=\"ra-action-box\">\n          <div class=\"ra-action-title\">Sinal 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\">Primeira a\u00e7\u00e3o recomendada<\/div>\n        <div class=\"ra-action-box\">\n          <div class=\"ra-action-title\">O que eu faria agora<\/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\">Pr\u00f3ximos passos<\/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 na reputa\u00e7\u00e3o e visibilidade<\/div>\n        <div class=\"ra-visual-split\" id=\"rv-visibility-grid\">\n          <div class=\"ra-visual-item\">\n            <div class=\"ra-visual-title\">Perce\u00e7\u00e3o do 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\">Visibilidade nas 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\">Capta\u00e7\u00e3o de novas avalia\u00e7\u00f5es<\/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\">Resumo executivo<\/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            melhora a tua reputa\u00e7\u00e3o\n          <\/div>\n\n          <div class=\"review-conversion-title\">\n            Esta an\u00e1lise \u00e9 apenas o princ\u00edpio\n          <\/div>\n\n          <div class=\"review-conversion-lead\">\n            Deteta problemas nas tuas avalia\u00e7\u00f5es, responde com IA e melhora a tua pontua\u00e7\u00e3o sem perder horas a ler opini\u00f5es.\n          <\/div>\n\n          <div class=\"review-conversion-text\">\n            J\u00e1 viste uma amostra de como os teus clientes te percecionam. Com o software de gest\u00e3o de avalia\u00e7\u00f5es da Repscan podes analisar todas as tuas avalia\u00e7\u00f5es automaticamente, centralizar perfis, responder a opini\u00f5es com IA, resumir milhares de coment\u00e1rios em segundos, agrup\u00e1-los por temas e proteger a tua pontua\u00e7\u00e3o.\n          <\/div>\n\n          <div class=\"review-benefits\">\n            <div class=\"review-benefit\">\u2713 Painel \u00fanico com Google, Trustpilot e outras plataformas<\/div>\n            <div class=\"review-benefit\">\u2713 Respostas em massa a avalia\u00e7\u00f5es com IA<\/div>\n            <div class=\"review-benefit\">\u2713 Resumo autom\u00e1tico de milhares de opini\u00f5es com IA<\/div>\n            <div class=\"review-benefit\">\u2713 Elimina\u00e7\u00e3o de avalia\u00e7\u00f5es falsas a partir da plataforma<\/div>\n            <div class=\"review-benefit\">\u2713 Etiquetas para agrupar avalia\u00e7\u00f5es por temas<\/div>\n            <div class=\"review-benefit\">\u2713 Cart\u00e3o NFC gratuito para aumentar as tuas avalia\u00e7\u00f5es<\/div>\n            <div class=\"review-benefit\">\u2713 Melhora o teu SEO local<\/div>\n          <\/div>\n\n          <div class=\"review-cta-row\">\n            <a class=\"review-btn-primary\" href=\"https:\/\/www.repscan.com\/pt-pt\/software-gestao-avaliacoes\/\">Ver mais detalhes do software \u2192<\/a>\n            <a class=\"review-btn-secondary\" href=\"https:\/\/www.repscan.com\/pt-pt\/contacto\/\">Reservar demo (10 min.)<\/a>\n          <\/div>\n\n          <div class=\"review-note\">\n            Mais de 1.200 empresas j\u00e1 gerem as suas avalia\u00e7\u00f5es com a Repscan.\n          <\/div>\n\n          <div class=\"review-clients-box\">\n            <div class=\"review-clients-label\">Algumas marcas e entidades que j\u00e1 trabalham com a 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        Nova an\u00e1lise\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=\"Fechar\" 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\">Introduz o teu email para ver os resultados<\/div>\n        <div class=\"ra-popup-subtitle\">Ao fechar esta janela poder\u00e1s ver o resultado no ecr\u00e3.<\/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 em an\u00e1lise\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\">A analisar avalia\u00e7\u00f5es<\/div>\n    <div class=\"ra-thinking-text\">A IA est\u00e1 a processar sentimento, padr\u00f5es recorrentes, sinais de risco e oportunidades de melhoria.<\/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    'Apoio ao cliente': ['atenci\u00f3n','atencion','servicio','trato','amable','amables','personal','equipo','trabajadores','empleados','staff','camarero','camarera','camareros','camareras'],\n    'Velocidade \/ Prazos':  ['r\u00e1pido','rapido','r\u00e1pida','rapida','lento','lenta','tiempo','tardaron','espera','plazo','puntual','retraso','entrega'],\n    'Qualidade':             ['calidad','resultado','acabado','trabajo','profesional','profesionales','impecable','detalle','comida','platos','carne','arroz','risotto'],\n    'Pre\u00e7o \/ Valor':      ['precio','caro','cara','barato','barata','coste','costo','dinero','econ\u00f3mico','economico','valor','40-50','50','\u20ac'],\n    'Comunica\u00e7\u00e3o':        ['comunicaci\u00f3n','comunicacion','informaci\u00f3n','informacion','respuesta','responden','contacto','email','llamada','whatsapp'],\n    'Resolu\u00e7\u00e3o':          ['problema','problemas','soluci\u00f3n','solucion','resolvieron','arreglaron','solucionaron','incidencia'],\n    'Recomenda\u00e7\u00e3o':       ['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 + ' avalia\u00e7\u00e3o' + (reviews !== 1 ? 'es' : '') + ' detetada' + (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:'M\u00e9dia', 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:'M\u00e9dia', level:'mid', score:avg };\n    return { label:'Baixa', 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:'Urg\u00eancia alta', level:'high' };\n    }\n    if (riskPct >= 8 || score < 6.5) {\n      return { label:'Vigiar de perto', level:'mid' };\n    }\n    return { label:'Situa\u00e7\u00e3o est\u00e1vel', level:'low' };\n  }\n\n  function getActionForTopic(topic) {\n    if (topic === 'Apoio ao cliente') return 'Rever o tratamento, os tempos de resposta e como se respondem \u00e0s avalia\u00e7\u00f5es cr\u00edticas.';\n    if (topic === 'Velocidade \/ Prazos') return 'Reduzir a espera, rever picos de carga e priorizar incidentes recorrentes.';\n    if (topic === 'Qualidade') return 'Rever a consist\u00eancia do produto ou servi\u00e7o e detetar falhas recorrentes.';\n    if (topic === 'Pre\u00e7o \/ Valor') return 'Refor\u00e7ar a perce\u00e7\u00e3o de valor e captar mais avalia\u00e7\u00f5es positivas recentes.';\n    if (topic === 'Comunica\u00e7\u00e3o') return 'Melhorar o acompanhamento, as mensagens ao cliente e a resposta a incidentes.';\n    if (topic === 'Resolu\u00e7\u00e3o') return 'Resolver problemas antes que se transformem em novas avalia\u00e7\u00f5es negativas.';\n    if (topic === 'Recomenda\u00e7\u00e3o') return 'Aproveitar clientes satisfeitos para aumentar as avalia\u00e7\u00f5es recentes.';\n    return 'Rever este ponto antes que continue a crescer.';\n  }\n\n  function getImprovementActions(problemTopics, strengthTopics, riskPct) {\n    var actions = [];\n    if (riskPct >= 15) {\n      actions.push('Responder primeiro \u00e0s avalia\u00e7\u00f5es mais negativas e mais recentes.');\n    } else if (riskPct >= 8) {\n      actions.push('Ordenar as avalia\u00e7\u00f5es cr\u00edticas por prioridade e corrigir o padr\u00e3o principal.');\n    } else {\n      actions.push('Manter um acompanhamento semanal para que os problemas n\u00e3o ganhem 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 os pontos fortes detetados para captar mais avalia\u00e7\u00f5es 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 ? 'maioritariamente positivo' : 'com predom\u00ednio negativo';\n    if (pos === 0 && neg === 0) mainTone = 'neutro';\n    if (neu > pos && neu > neg) mainTone = 'misto ou neutro';\n\n    var topicStr = topTopics.length\n      ? topTopics.slice(0,3).map(function(t){ return '<strong>' + t[0] + '<\/strong>'; }).join(', ')\n      : 'v\u00e1rios aspetos';\n\n    var verdict = score >= 7 ? 'A perce\u00e7\u00e3o geral \u00e9 boa.' :\n                  score >= 5 ? 'A perce\u00e7\u00e3o \u00e9 mista.' :\n                               'A perce\u00e7\u00e3o \u00e9 negativa.';\n\n    return 'Foram analisadas <strong>' + total + ' avalia\u00e7\u00f5es<\/strong>. O tom \u00e9 ' + mainTone +\n           ' (<strong>' + pos + ' positivas<\/strong>, ' + neg + ' negativas, ' + neu + ' neutras), ' +\n           'com uma pontua\u00e7\u00e3o de sentimento de <strong>' + score + '\/10<\/strong>. ' +\n           'Os temas que mais pesam s\u00e3o ' + topicStr + '. ' + verdict;\n  }\n\n  function buildVisibilityReadings(topTopics, strengthTopics, problemTopics, riskPct) {\n    var perception = 'As avalia\u00e7\u00f5es est\u00e3o a moldar a perce\u00e7\u00e3o do neg\u00f3cio em torno de ' +\n      (topTopics.length ? '<strong>' + topTopics.slice(0,2).map(function(t){ return t[0]; }).join('<\/strong> y <strong>') + '<\/strong>' : 'v\u00e1rios temas') + '.';\n\n    var platforms = riskPct >= 12\n      ? 'Se as avalia\u00e7\u00f5es negativas continuarem vis\u00edveis e se repetirem, a confian\u00e7a baixa e o neg\u00f3cio torna-se mais vulner\u00e1vel face a outros perfis.'\n      : 'A leitura atual favorece uma perce\u00e7\u00e3o mais est\u00e1vel, mas conv\u00e9m manter um fluxo constante de avalia\u00e7\u00f5es recentes.';\n\n    var acquisition = strengthTopics.length\n      ? 'Os pontos fortes mais recorrentes s\u00e3o <strong>' + strengthTopics.slice(0,2).map(function(t){ return t.topic; }).join('<\/strong> y <strong>') + '<\/strong>. S\u00e3o a base para pedir mais avalia\u00e7\u00f5es positivas.'\n      : 'Precisas de mais sinais positivos recorrentes para refor\u00e7ar a confian\u00e7a e atrair novas avalia\u00e7\u00f5es favor\u00e1veis.';\n\n    if (problemTopics.length && riskPct >= 15) {\n      acquisition = 'Antes de pedir mais avalia\u00e7\u00f5es, conv\u00e9m corrigir <strong>' + problemTopics[0].topic + '<\/strong> para que n\u00e3o continue a gerar atrito.';\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 += 'H\u00e1 uma propor\u00e7\u00e3o alta de avalia\u00e7\u00f5es negativas. <strong>Isso pode travar decis\u00f5es de compra ou contacto<\/strong> mesmo que o neg\u00f3cio tenha boas opini\u00f5es positivas.';\n    } else if (riskPct >= 10) {\n      text += 'H\u00e1 sinais de atrito vis\u00edveis. <strong>Se n\u00e3o forem corrigidos, podem pesar mais do que as avalia\u00e7\u00f5es favor\u00e1veis<\/strong> e enfraquecer a confian\u00e7a.';\n    } else {\n      text += 'A situa\u00e7\u00e3o n\u00e3o parece cr\u00edtica, mas <strong>deixar crescer pequenos problemas recorrentes<\/strong> pode afetar a perce\u00e7\u00e3o com o tempo.';\n    }\n\n    if (problemTopics.length) {\n      text += ' Neste momento, o maior foco de risco est\u00e1 em <strong>' + problemTopics[0].topic + '<\/strong>.';\n    }\n\n    if (intensity.level === 'high') {\n      text += ' Al\u00e9m disso, o tom emocional \u00e9 alto, por isso cada avalia\u00e7\u00e3o cr\u00edtica tem mais capacidade de prejudicar a imagem percebida.';\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: 'As avalia\u00e7\u00f5es cr\u00edticas concentram-se em ' + problemTopics[0].topic + ' y ' + problemTopics[1].topic + '.',\n        sub: 'N\u00e3o parece um caso isolado. H\u00e1 um padr\u00e3o recorrente que conv\u00e9m atacar antes que pese mais na perce\u00e7\u00e3o global.'\n      };\n    }\n\n    if (problemTopics.length === 1) {\n      return {\n        main: 'O padr\u00e3o dominante aparece em ' + problemTopics[0].topic + '.',\n        sub: '\u00c9 a frente que mais est\u00e1 a afetar neste momento a leitura geral das avalia\u00e7\u00f5es.'\n      };\n    }\n\n    if (strengthTopics.length >= 2) {\n      return {\n        main: 'As avalia\u00e7\u00f5es positivas apoiam-se sobretudo em ' + strengthTopics[0].topic + ' y ' + strengthTopics[1].topic + '.',\n        sub: 'Aqui h\u00e1 uma oportunidade clara para pedir mais avalia\u00e7\u00f5es e refor\u00e7ar a perce\u00e7\u00e3o do neg\u00f3cio.'\n      };\n    }\n\n    return {\n      main: 'Ainda n\u00e3o h\u00e1 um padr\u00e3o dominante suficientemente claro.',\n      sub: '\u00c9 preciso mais volume ou mais sinais recorrentes para identificar com mais precis\u00e3o o que pesa mais.'\n    };\n  }\n\n  function getFirstAction(problemTopics, strengthTopics, riskPct) {\n    if (problemTopics.length) {\n      var main = 'Rev\u00ea primeiro ' + problemTopics[0].topic + '.';\n      var sub = getActionForTopic(problemTopics[0].topic);\n\n      if (problemTopics[0].topic === 'Apoio ao cliente' || problemTopics[0].topic === 'Comunica\u00e7\u00e3o' || problemTopics[0].topic === 'Resolu\u00e7\u00e3o') {\n        sub += ' Depois podes automatizar parte do acompanhamento e das respostas a partir do software.';\n      }\n\n      return {\n        main: main,\n        sub: sub,\n        links: [\n          { text:'Ver software de gest\u00e3o', url:'https:\/\/www.repscan.com\/pt-pt\/software-gestao-avaliacoes\/' },\n          { text:'Reservar demo gr\u00e1tis', url:'https:\/\/www.repscan.com\/pt-pt\/contacto\/' }\n        ]\n      };\n    }\n\n    if (strengthTopics.length) {\n      return {\n        main: 'Aproveita ' + strengthTopics[0].topic + ' para captar mais avalia\u00e7\u00f5es positivas.',\n        sub: 'Pede mais opini\u00f5es recentes e mant\u00e9m uma resposta constante para refor\u00e7ar a perce\u00e7\u00e3o do neg\u00f3cio.',\n        links: [\n          { text:'Ver software de gest\u00e3o', url:'https:\/\/www.repscan.com\/pt-pt\/software-gestao-avaliacoes\/' },\n          { text:'Reservar demo gr\u00e1tis', url:'https:\/\/www.repscan.com\/pt-pt\/contacto\/' }\n        ]\n      };\n    }\n\n    return {\n      main: 'Come\u00e7a por ordenar e responder \u00e0s avalia\u00e7\u00f5es mais recentes.',\n      sub: 'Com mais volume e acompanhamento ver\u00e1s mais cedo que padr\u00e3o domina e que mudan\u00e7as conv\u00e9m priorizar.',\n      links: [\n        { text:'Responder a avalia\u00e7\u00f5es com IA', url:'https:\/\/www.repscan.com\/pt-pt\/responder-avaliacoes-com-ia\/' },\n        { text:'Reservar demo gr\u00e1tis', url:'https:\/\/www.repscan.com\/pt-pt\/contacto\/' }\n      ]\n    };\n  }\n\n  function getFastRead(score, riskPct, pos, neg, neu) {\n    if (score < 5) {\n      return 'A leitura atual \u00e9 <strong>delicada<\/strong>. H\u00e1 mais atrito do que o desej\u00e1vel e conv\u00e9m intervir antes que continue a crescer.';\n    }\n    if (riskPct >= 15) {\n      return 'H\u00e1 avalia\u00e7\u00f5es positivas, mas <strong>o peso das negativas j\u00e1 \u00e9 vis\u00edvel<\/strong> e pode condicionar a decis\u00e3o de novos clientes.';\n    }\n    if (pos > neg) {\n      return 'A perce\u00e7\u00e3o \u00e9 <strong>aceit\u00e1vel ou boa<\/strong>, embora ainda haja margem para melhorar a consist\u00eancia e captar mais opini\u00f5es favor\u00e1veis.';\n    }\n    return 'O neg\u00f3cio transmite uma leitura <strong>mista<\/strong>. H\u00e1 pontos bons, mas ainda n\u00e3o pesam o 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 || 'N\u00e3o h\u00e1 sinais suficientes para ampliar a leitura.') + '<\/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 + ' men\u00e7\u00f5es negativas)';\n    });\n\n    var strengthLines = strengthTopics.map(function(item) {\n      return item.topic + ' (' + item.pos + ' men\u00e7\u00f5es 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 Perce\u00e7\u00e3o positiva' :\n                            score >= 5 ? '\u25c8 Perce\u00e7\u00e3o mista' :\n                                         '\u25c6 Perce\u00e7\u00e3o 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)\">N\u00e3o foram detetados temas com men\u00e7\u00f5es suficientes.<\/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)\">Sem palavras-chave em destaque.<\/span>';\n    }\n\n    fillList('rv-problems', problemLines, function(item) {\n      return '<strong>' + item + '<\/strong>';\n    }, 'N\u00e3o se detetam problemas recorrentes com peso suficiente.');\n\n    fillList('rv-strengths', strengthLines, function(item) {\n      return '<strong>' + item + '<\/strong>';\n    }, 'Ainda n\u00e3o h\u00e1 pontos fortes recorrentes com sinal suficiente.');\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\">Come\u00e7a hoje mesmo com a RepScan<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7db91c7b elementor-widget elementor-widget-html\" data-id=\"7db91c7b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"botones\">\n  <a href=\"https:\/\/www.repscan.com\/en\/eshop\/\" id=\"boton-cta-izquierda\" class=\"boton-cta-izquierda\">\n    Contratar agora\n    <span>\u279c<\/span>\n  <\/a>\n\n  <a href=\"https:\/\/www.repscan.com\/pt-pt\/software-gestao-avaliacoes\/\" id=\"boton-cta-derecha\" class=\"boton-cta-derecha\" target=\"_blank\" rel=\"noopener noreferrer\">\n    Mais 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\">Perguntas Frequentes sobre o analisador de avalia\u00e7\u00f5es com 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\">Como funciona exatamente o analisador de avalia\u00e7\u00f5es?<\/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>A nossa ferramenta utiliza intelig\u00eancia artificial treinada com as pol\u00edticas de conte\u00fado do Google, TripAdvisor e a legisla\u00e7\u00e3o do direito \u00e0 honra. O sistema analisa o texto \u00e0 procura de padr\u00f5es de linguagem, palavras-chave de infra\u00e7\u00e3o e estruturas que costumam justificar uma remo\u00e7\u00e3o t\u00e9cnica ou 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\">O resultado da an\u00e1lise \u00e9 100% fi\u00e1vel?<\/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>O analisador oferece uma estimativa de probabilidade baseada em dados. Embora tenha uma precis\u00e3o alt\u00edssima a detetar infra\u00e7\u00f5es de pol\u00edtica (como spam ou linguagem ofensiva), a decis\u00e3o final cabe sempre \u00e0 plataforma ou a um juiz. O que a nossa ferramenta faz \u00e9 dizer-te se tens argumentos s\u00f3lidos para ganhar o 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\">O que significam os n\u00edveis de probabilidade?<\/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>: A avalia\u00e7\u00e3o infringe claramente as pol\u00edticas (insultos, spam, conflito de interesses). \u00c9 muito prov\u00e1vel que se possa remover.<\/p><p><strong>M\u00e9dia:<\/strong> Existe uma zona cinzenta. \u00c9 necess\u00e1ria uma argumenta\u00e7\u00e3o legal personalizada para que a plataforma a retire.<\/p><p><strong>Baixa:<\/strong> A avalia\u00e7\u00e3o parece uma opini\u00e3o leg\u00edtima protegida pela liberdade de express\u00e3o.<\/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\">Os meus dados ou o texto da avalia\u00e7\u00e3o s\u00e3o guardados em algum lugar?<\/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>N\u00e3o. A an\u00e1lise \u00e9 totalmente privada e an\u00f3nima. O texto que colas \u00e9 processado em tempo real para gerar o diagn\u00f3stico e n\u00e3o \u00e9 armazenado em nenhuma base de dados p\u00fablica nem associado ao teu neg\u00f3cio, a menos que decidas contratar o servi\u00e7o e nos forne\u00e7as os teus dados 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":{"_yoast_wpseo_title":"","_yoast_wpseo_metadesc":"Analisador de avalia\u00e7\u00f5es gratuito com IA: cola as tuas avalia\u00e7\u00f5es do Google ou Trustpilot e obt\u00e9m sentimento, temas e um resumo em segundos. Sem limites, 100% gratuito.","_mbp_gutenberg_autopost":false,"footnotes":""},"class_list":{"0":"post-56546","1":"page","2":"type-page","3":"status-publish","5":"infinite-scroll-item"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.7 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Analisador de avalia\u00e7\u00f5es gratuito com IA | RepScan<\/title>\n<meta name=\"description\" content=\"Analisador de avalia\u00e7\u00f5es gratuito com IA: cola as tuas avalia\u00e7\u00f5es do Google ou Trustpilot e obt\u00e9m sentimento, temas e um resumo em segundos. Sem limites, 100% gratuito.\" \/>\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\/pt-pt\/analisador-avaliacoes-ia\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Analisador de avalia\u00e7\u00f5es gratuito com IA | RepScan\" \/>\n<meta property=\"og:description\" content=\"Analisador de avalia\u00e7\u00f5es gratuito com IA: cola as tuas avalia\u00e7\u00f5es do Google ou Trustpilot e obt\u00e9m sentimento, temas e um resumo em segundos. Sem limites, 100% gratuito.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.repscan.com\/pt-pt\/analisador-avaliacoes-ia\/\" \/>\n<meta property=\"og:site_name\" content=\"RepScan\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-20T10:42:09+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/pt-pt\\\/analisador-avaliacoes-ia\\\/\",\"url\":\"https:\\\/\\\/www.repscan.com\\\/pt-pt\\\/analisador-avaliacoes-ia\\\/\",\"name\":\"Analisador de avalia\u00e7\u00f5es gratuito com IA | RepScan\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.repscan.com\\\/pt-pt\\\/#website\"},\"datePublished\":\"2026-06-20T10:23:17+00:00\",\"dateModified\":\"2026-06-20T10:42:09+00:00\",\"description\":\"Analisador de avalia\u00e7\u00f5es gratuito com IA: cola as tuas avalia\u00e7\u00f5es do Google ou Trustpilot e obt\u00e9m sentimento, temas e um resumo em segundos. Sem limites, 100% gratuito.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.repscan.com\\\/pt-pt\\\/analisador-avaliacoes-ia\\\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.repscan.com\\\/pt-pt\\\/analisador-avaliacoes-ia\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/pt-pt\\\/analisador-avaliacoes-ia\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.repscan.com\\\/pt-pt\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Analisador de avalia\u00e7\u00f5es gratuito com IA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/pt-pt\\\/#website\",\"url\":\"https:\\\/\\\/www.repscan.com\\\/pt-pt\\\/\",\"name\":\"RepScan\",\"description\":\"Plataforma de Reputaci\u00f3n Digital\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.repscan.com\\\/pt-pt\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.repscan.com\\\/pt-pt\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/pt-pt\\\/#organization\",\"name\":\"RepScan\",\"url\":\"https:\\\/\\\/www.repscan.com\\\/pt-pt\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/pt-pt\\\/#\\\/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\\\/pt-pt\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Analisador de avalia\u00e7\u00f5es gratuito com IA | RepScan","description":"Analisador de avalia\u00e7\u00f5es gratuito com IA: cola as tuas avalia\u00e7\u00f5es do Google ou Trustpilot e obt\u00e9m sentimento, temas e um resumo em segundos. Sem limites, 100% gratuito.","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\/pt-pt\/analisador-avaliacoes-ia\/","og_locale":"pt_PT","og_type":"article","og_title":"Analisador de avalia\u00e7\u00f5es gratuito com IA | RepScan","og_description":"Analisador de avalia\u00e7\u00f5es gratuito com IA: cola as tuas avalia\u00e7\u00f5es do Google ou Trustpilot e obt\u00e9m sentimento, temas e um resumo em segundos. Sem limites, 100% gratuito.","og_url":"https:\/\/www.repscan.com\/pt-pt\/analisador-avaliacoes-ia\/","og_site_name":"RepScan","article_modified_time":"2026-06-20T10:42:09+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.repscan.com\/pt-pt\/analisador-avaliacoes-ia\/","url":"https:\/\/www.repscan.com\/pt-pt\/analisador-avaliacoes-ia\/","name":"Analisador de avalia\u00e7\u00f5es gratuito com IA | RepScan","isPartOf":{"@id":"https:\/\/www.repscan.com\/pt-pt\/#website"},"datePublished":"2026-06-20T10:23:17+00:00","dateModified":"2026-06-20T10:42:09+00:00","description":"Analisador de avalia\u00e7\u00f5es gratuito com IA: cola as tuas avalia\u00e7\u00f5es do Google ou Trustpilot e obt\u00e9m sentimento, temas e um resumo em segundos. Sem limites, 100% gratuito.","breadcrumb":{"@id":"https:\/\/www.repscan.com\/pt-pt\/analisador-avaliacoes-ia\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.repscan.com\/pt-pt\/analisador-avaliacoes-ia\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.repscan.com\/pt-pt\/analisador-avaliacoes-ia\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.repscan.com\/pt-pt\/"},{"@type":"ListItem","position":2,"name":"Analisador de avalia\u00e7\u00f5es gratuito com IA"}]},{"@type":"WebSite","@id":"https:\/\/www.repscan.com\/pt-pt\/#website","url":"https:\/\/www.repscan.com\/pt-pt\/","name":"RepScan","description":"Plataforma de Reputaci\u00f3n Digital","publisher":{"@id":"https:\/\/www.repscan.com\/pt-pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.repscan.com\/pt-pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/www.repscan.com\/pt-pt\/#organization","name":"RepScan","url":"https:\/\/www.repscan.com\/pt-pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/www.repscan.com\/pt-pt\/#\/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\/pt-pt\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.repscan.com\/pt-pt\/wp-json\/wp\/v2\/pages\/56546","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.repscan.com\/pt-pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.repscan.com\/pt-pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.repscan.com\/pt-pt\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.repscan.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=56546"}],"version-history":[{"count":1,"href":"https:\/\/www.repscan.com\/pt-pt\/wp-json\/wp\/v2\/pages\/56546\/revisions"}],"predecessor-version":[{"id":56559,"href":"https:\/\/www.repscan.com\/pt-pt\/wp-json\/wp\/v2\/pages\/56546\/revisions\/56559"}],"wp:attachment":[{"href":"https:\/\/www.repscan.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=56546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}