{"id":57952,"date":"2026-06-22T17:36:36","date_gmt":"2026-06-22T15:36:36","guid":{"rendered":"https:\/\/www.repscan.com\/analizador-de-resenas-con-ia\/"},"modified":"2026-10-07T11:12:52","modified_gmt":"2026-10-07T09:12:52","slug":"analitzador-ressenyes-ia","status":"publish","type":"page","link":"https:\/\/www.repscan.com\/ca\/analitzador-ressenyes-ia\/","title":{"rendered":"Analitzador de ressenyes amb IA"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"57952\" class=\"elementor elementor-57952 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;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-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<h1 class=\"elementor-heading-title elementor-size-default\">Analitzador de ressenyes gratu\u00eft amb IA<\/h1>\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>Enganxa les ressenyes de la teva fitxa de Google, Trustpilot o qualsevol altra plataforma i obt\u00e9n en segons una lectura completa del teu negoci: sentiment general, distribuci\u00f3 positiva i negativa, temes m\u00e9s esmentats i un resum executiu per prendre decisions.<\/p><p><strong>Gratu\u00eft i sense l\u00edmit de ressenyes.<\/strong> \u00c9s una versi\u00f3 redu\u00efda del nostre <a href=\"https:\/\/www.repscan.com\/ca\/programari-gestio-ressenyes\/\">programari de gesti\u00f3 de ressenyes<\/a>.<\/p><p>Vols saber si una ressenya concreta es pot eliminar? Fes servir el <a href=\"https:\/\/www.repscan.com\/ca\/comprovador-ressenyes-eliminables-google\/\">comprovador de ressenyes eliminables<\/a>.<\/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<style>\n.rs-ctas{display:flex;gap:14px;flex-wrap:wrap;align-items:center;margin:8px 0 0}\n.rs-ctas.center{justify-content:center}\n.rs-ctas a{display:inline-flex;align-items:center;justify-content:center;gap:9px;font-size:16px;font-weight:600;padding:15px 30px;border-radius:10px;text-decoration:none!important;line-height:1.2;transition:background .16s,border-color .16s,box-shadow .18s}\n.rs-ctas .rs-btn{color:#fff!important;background:#294eff!important;box-shadow:0 1px 2px rgba(60,64,67,.18),0 1px 3px 1px rgba(60,64,67,.08)}\n.rs-ctas .rs-btn:hover{background:#1e3ad6!important;box-shadow:0 1px 3px rgba(60,64,67,.2),0 4px 8px 3px rgba(60,64,67,.1)}\n.rs-ctas .rs-ghost{color:#294eff!important;background:#fff!important;border:1px solid #dadce0}\n.rs-ctas .rs-ghost:hover{background:#e9edff!important;border-color:#d2e3fc}\n@media(max-width:720px){.rs-ctas a{width:100%}}\n<\/style>\n<div class=\"rs-ctas center\">\n  <a class=\"rs-btn\" href=\"https:\/\/www.repscan.com\/ca\/programari-gestio-ressenyes\/\">Veure el programari de gesti\u00f3 de ressenyes<\/a>\n  <a class=\"rs-ghost\" href=\"https:\/\/www.repscan.com\/ca\/comprovador-ressenyes-eliminables-google\/\">Una ressenya concreta? Comprova si es pot eliminar<\/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.rs-steps{width:100%;max-width:1160px;margin:0 auto;padding:0 8px}\n.rs-steps-head{max-width:640px;margin:0 0 30px}\n.rs-steps-head h2{font-size:clamp(26px,3.3vw,36px);line-height:1.12;letter-spacing:-.02em;color:#202124;margin:0 0 10px}\n.rs-steps-head p{font-size:17px;color:#5f6368;margin:0}\n.rs-steps-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}\n.rs-step{background:#fff;border:1px solid #dadce0;border-radius:16px;padding:26px;box-shadow:0 1px 2px rgba(60,64,67,.18),0 1px 3px 1px rgba(60,64,67,.08)}\n.rs-step .ic{width:46px;height:46px;border-radius:12px;background:#f8f9fa;border:1px solid #dadce0;display:flex;align-items:center;justify-content:center;color:#202124;margin-bottom:16px}\n.rs-step .ic svg{width:22px;height:22px}\n.rs-step .n{font-size:13px;font-weight:600;color:#80868b;margin-bottom:6px}\n.rs-step h3{font-size:18px;font-weight:600;color:#202124;letter-spacing:-.015em;margin:0 0 8px;line-height:1.25}\n.rs-step p{font-size:15px;color:#5f6368;line-height:1.6;margin:0}\n@media(max-width:900px){.rs-steps-grid{grid-template-columns:1fr}}\n<\/style>\n<div class=\"rs-steps\">\n  <div class=\"rs-steps-head\">\n    <h2>Com funciona l\u2019analitzador<\/h2>\n    <p>Tres passos per passar d\u2019un munt d\u2019opinions a una lectura clara de la teva reputaci\u00f3.<\/p>\n  <\/div>\n  <div class=\"rs-steps-grid\">\n    <div class=\"rs-step\">\n      <span class=\"ic\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\"\/><path d=\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\"\/><path d=\"M9 12h6M9 16h6\"\/><\/svg><\/span>\n      <div class=\"n\">Pas 1<\/div>\n      <h3>Enganxa les teves ressenyes<\/h3>\n      <p>Copia les opinions de Google Maps, Trustpilot, Tripadvisor o qualsevol altra plataforma. L\u2019analitzador les separa i les compta de manera autom\u00e0tica.<\/p>\n    <\/div>\n    <div class=\"rs-step\">\n      <span class=\"ic\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M3 3v18h18\"\/><path d=\"m7 15 4-4 4 4 5-6\"\/><\/svg><\/span>\n      <div class=\"n\">Pas 2<\/div>\n      <h3>Lectura amb IA<\/h3>\n      <p>Sentiment general, distribuci\u00f3 positiva i negativa, temes m\u00e9s esmentats, paraules clau, punts forts i problemes detectats en segons.<\/p>\n    <\/div>\n    <div class=\"rs-step\">\n      <span class=\"ic\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"\/><path d=\"M14 2v6h6\"\/><path d=\"M8 13h8M8 17h5\"\/><\/svg><\/span>\n      <div class=\"n\">Pas 3<\/div>\n      <h3>Resum executiu i passos seg\u00fcents<\/h3>\n      <p>Una lectura del risc comercial, la primera acci\u00f3 recomanada i un resum a punt per compartir amb el teu equip.<\/p>\n    <\/div>\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:#ffffff;\n  --ra-surface:#ffffff; --ra-surface2:#f8f9fa; --ra-surface3:#f1f3f4;\n  --ra-border:#dadce0; --ra-border2:#c6cad1;\n  --ra-text:#202124; --ra-muted:#5f6368; --ra-muted2:#80868b;\n  --ra-blue:#294eff; --ra-blue2:#1e3ad6; --ra-violet:#294eff; --ra-cyan:#294eff;\n  --ra-green:#188038; --ra-green-dim:rgba(24,128,56,.08); --ra-green-border:rgba(24,128,56,.25);\n  --ra-red:#d93025; --ra-red-dim:rgba(217,48,37,.07); --ra-red-border:rgba(217,48,37,.22);\n  --ra-amber:#e37400; --ra-amber-dim:rgba(249,171,0,.12); --ra-amber-border:rgba(249,171,0,.35);\n  --ra-shadow:0 1px 2px rgba(60,64,67,.18),0 1px 3px 1px rgba(60,64,67,.08);\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\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<style>\n\/* ===== restyle claro (estilo repscan.com) ===== *\/\n.ra-wrap{color:var(--ra-text)}\n.ra-input-card,.ra-card,.ra-card.soft,.ra-card.ai,.ra-card.highlight,.ra-card.glass-light,.ra-score-card{background:#fff!important;border:1px solid var(--ra-border)!important;box-shadow:var(--ra-shadow)!important}\n.ra-fmt-btn{background:#fff!important;border-color:var(--ra-border)!important;color:var(--ra-muted)!important}\n.ra-fmt-btn:hover{border-color:var(--ra-blue)!important;color:var(--ra-blue)!important;background:#e9edff!important}\n.ra-fmt-btn.active{background:#e9edff!important;border-color:var(--ra-blue)!important;color:var(--ra-blue)!important}\n.ra-input-head-badge,.ra-ai-chip,.ra-thinking-ai-chip,.review-conversion-kicker,.ra-thinking-countdown{background:#e9edff!important;border:1px solid #d2e3fc!important;color:var(--ra-blue)!important;text-transform:none!important;letter-spacing:0!important;font-weight:600!important}\n.ra-input-label,.ra-side-kpi-label,.ra-pill-label,.ra-metric-label,.ra-visual-title,.ra-pain-title,.ra-action-title,.review-clients-label,.ra-card-label{text-transform:none!important;letter-spacing:0!important}\n.ra-input-label span{box-shadow:none!important;background:var(--ra-blue)!important}\n.ra-wrap textarea{background:#fff!important;border:1.5px solid var(--ra-border)!important;color:var(--ra-text)!important}\n.ra-wrap textarea:focus{border-color:var(--ra-blue)!important;box-shadow:0 0 0 3px rgba(41,78,255,.1)!important;background:#fff!important}\n.ra-wrap textarea::placeholder{color:#9aa1b2!important}\n.ra-btn-analyze{background:var(--ra-blue)!important;border:0!important;box-shadow:var(--ra-shadow)!important;color:#fff!important;text-transform:none!important;letter-spacing:0!important}\n.ra-btn-analyze:hover{background:var(--ra-blue2)!important;box-shadow:0 1px 3px rgba(60,64,67,.2),0 4px 8px 3px rgba(60,64,67,.1)!important}\n.ra-btn-clear,.ra-btn-reset{background:#fff!important;border:1px solid var(--ra-border)!important;color:var(--ra-blue)!important;text-transform:none!important;letter-spacing:0!important}\n.ra-btn-clear:hover,.ra-btn-reset:hover{background:#e9edff!important;color:var(--ra-blue)!important}\n.ra-card-label,.ra-side-kpi-value,.ra-metric-value,.ra-topic-name,.ra-summary-text strong,.ra-bullets li strong,.ra-pain-text,.ra-pain-text strong,.ra-action-main,.ra-thinking-title,.ra-popup-title,.ra-score-num,.ra-pill-num,.ra-visual-title{color:var(--ra-text)!important}\n.ra-pain-title,.ra-action-title,.ra-thinking-text,.ra-popup-subtitle,.ra-side-kpi-label,.ra-metric-label,.ra-metric-desc,.ra-side-kpi-text,.ra-pill-label,.ra-visual-text,.ra-action-sub,.ra-summary-text,.ra-bullets li,.ra-stars-meta,.ra-score-denom,.ra-score-verdict,.ra-char-count,.ra-hint-text,.ra-input-head-text,.review-clients-label{color:var(--ra-muted)!important}\n.ra-score-bar-track,.ra-mini-bar,.ra-ratio-bar,.ra-topic-track{background:#e8eaed!important}\n.ra-stars .star,.ra-mini-stars .star{color:#dadce0!important}\n.ra-stars .star.fill,.ra-mini-stars .star.fill{color:#f9ab00!important;text-shadow:none!important}\n.ra-side-kpi,.ra-metric-box,.ra-visual-item,.ra-action-box,.ra-kw-tag,.ra-posneg-pill,.ra-mini-pill{background:var(--ra-surface2)!important;border:1px solid var(--ra-border)!important;color:var(--ra-text)!important}\n.ra-kw-tag.pos{background:var(--ra-green-dim)!important;border-color:var(--ra-green-border)!important;color:#14682f!important}\n.ra-kw-tag.neg{background:var(--ra-red-dim)!important;border-color:var(--ra-red-border)!important;color:#a50e0e!important}\n.ra-posneg-pill.pos{background:var(--ra-green-dim)!important;border-color:var(--ra-green-border)!important}\n.ra-posneg-pill.neg{background:var(--ra-red-dim)!important;border-color:var(--ra-red-border)!important}\n.ra-posneg-pill.neu{background:var(--ra-amber-dim)!important;border-color:var(--ra-amber-border)!important}\n.ra-pill-num.pos{color:#14682f!important}.ra-pill-num.neg{color:#a50e0e!important}.ra-pill-num.neu{color:#b06000!important}\n.ra-topic-fill{background:var(--ra-blue)!important}\n.ra-summary-text{border-left-color:var(--ra-blue)!important}\n.ra-pain-box{background:rgba(217,48,37,.04)!important;border:1px solid rgba(217,48,37,.16)!important}\n.ra-reco-link{background:var(--ra-blue)!important;color:#fff!important;border:0!important;text-decoration:none!important}\n.ra-reco-link:hover{background:var(--ra-blue2)!important}\n.review-conversion-box{background:#fff!important;border:1px solid var(--ra-border)!important;box-shadow:var(--ra-shadow)!important;color:var(--ra-text)!important}\n.review-conversion-title{color:var(--ra-text)!important}\n.review-conversion-lead{color:var(--ra-text)!important}\n.review-conversion-text,.review-note{color:var(--ra-muted)!important}\n.review-benefit{color:var(--ra-text)!important;background:var(--ra-surface2)!important;border:1px solid var(--ra-border)!important}\n.review-btn-primary{background:var(--ra-blue)!important;box-shadow:var(--ra-shadow)!important;border-radius:10px!important;text-decoration:none!important}\n.review-btn-primary:hover{background:var(--ra-blue2)!important}\n.review-btn-secondary{background:#fff!important;border:1px solid var(--ra-border)!important;color:var(--ra-blue)!important;border-radius:10px!important;text-decoration:none!important}\n.review-btn-secondary:hover{background:#e9edff!important}\n.review-clients-box{background:var(--ra-surface2)!important;border:1px solid var(--ra-border)!important}\n.review-logo-item{background:#fff!important;border:1px solid var(--ra-border)!important}\n.ra-popup-overlay{background:rgba(11,13,25,.55)!important;backdrop-filter:blur(3px)}\n.ra-popup-box{background:#fff!important;border:1px solid var(--ra-border)!important;box-shadow:0 30px 80px rgba(9,12,26,.35)!important}\n.ra-popup-close{background:#f8f9fa!important;border:0!important;color:var(--ra-muted)!important}\n.ra-popup-close:hover{background:#eceef1!important;color:var(--ra-text)!important}\n.ra-popup-head{border-bottom:1px solid var(--ra-border)!important}\n.ra-popup-icon{background:#e9edff!important;border:1px solid #d2e3fc!important;color:var(--ra-blue)!important;box-shadow:none!important}\n.ra-popup-form-wrap iframe{border:1px solid var(--ra-border)!important;background:#fff}\n.ra-thinking-overlay{background:rgba(11,13,25,.6)!important}\n.ra-thinking-box{background:#fff!important;border:1px solid var(--ra-border)!important;box-shadow:0 30px 80px rgba(9,12,26,.35)!important}\n.ra-thinking-core{background:var(--ra-blue)!important;box-shadow:none!important}\n.ra-thinking-ring{border-color:var(--ra-border)!important}\n.ra-thinking-ring.two{border-color:#d2e3fc!important}\n.ra-thinking-dot{background:var(--ra-blue)!important;box-shadow:none!important}\n<\/style>\n\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        Analitzador de ressenyes amb IA\n      <\/div>\n      <div class=\"ra-input-head-text\">\n        Analitza el sentiment, els temes repetits, els riscos i les oportunitats a partir de ressenyes enganxades des de Google, Trustpilot, Tripadvisor o altres plataformes.\n      <\/div>\n    <\/div>\n\n    <div class=\"ra-format-selector\">\n      <div class=\"ra-input-label\" style=\"margin-bottom:0.5rem\"><span><\/span> Font de les ressenyes<\/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\">Text lliure<\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"ra-input-label\" style=\"margin-top:1.2rem\"><span><\/span> Enganxa aqu\u00ed les teves ressenyes<\/div>\n    <textarea id=\"rv-input\" placeholder=\"Enganxa una o diverses ressenyes copiades directament de Google Maps, Trustpilot, Tripadvisor o altres plataformes.\"><\/textarea>\n\n    <div class=\"ra-input-footer\">\n      <span class=\"ra-char-count\" id=\"rv-chars\">0 car\u00e0cters \u00b7 0 ressenyes detectades<\/span>\n      <span class=\"ra-hint-text\">Ctrl+Enter per analitzar<\/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        Analitzar ressenyes\n      <\/button>\n\n      <button class=\"ra-btn-clear\" id=\"rv-clear\" type=\"button\">\n        Esborrar\n      <\/button>\n    <\/div>\n  <\/div>\n\n  <div class=\"ra-results\" id=\"rv-results\">\n    <div class=\"ra-results-grid\">\n\n      <div class=\"ra-card ra-score-card ai\" id=\"rv-score-card\">\n        <div class=\"ra-score-left\">\n          <div>\n            <div class=\"ra-card-label\">\n              <span>Sentiment general<\/span>\n              <span class=\"ra-ai-chip\">\n                <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3l1.9 4.6L18 9.5l-4.1 1.9L12 16l-1.9-4.6L6 9.5l4.1-1.9L12 3z\"><\/path><\/svg>\n                IA\n              <\/span>\n            <\/div>\n\n            <div class=\"ra-score-main\">\n              <span class=\"ra-score-num\" id=\"rv-score-num\">\u2014<\/span>\n              <span class=\"ra-score-denom\">\/10<\/span>\n            <\/div>\n\n            <div class=\"ra-score-bar-wrap\" style=\"margin-top:0.7rem;\">\n              <div class=\"ra-score-bar-track\">\n                <div class=\"ra-score-bar-fill\" id=\"rv-score-bar\"><\/div>\n              <\/div>\n              <div class=\"ra-score-verdict\" id=\"rv-score-verdict\">\u2014<\/div>\n            <\/div>\n\n            <div class=\"ra-stars-wrap\">\n              <div class=\"ra-stars\" id=\"rv-stars\">\n                <span class=\"star\">\u2605<\/span>\n                <span class=\"star\">\u2605<\/span>\n                <span class=\"star\">\u2605<\/span>\n                <span class=\"star\">\u2605<\/span>\n                <span class=\"star\">\u2605<\/span>\n              <\/div>\n              <div class=\"ra-stars-meta\">\n                Nota estimada visible a les plataformes <strong id=\"rv-rating-est-inline\">\u2014<\/strong>\n              <\/div>\n            <\/div>\n          <\/div>\n\n          <div class=\"ra-pain-box\">\n            <div class=\"ra-pain-title\">Lectura r\u00e0pida<\/div>\n            <div class=\"ra-pain-text\" id=\"rv-score-fast-read\">\u2014<\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"ra-score-side\">\n          <div class=\"ra-side-kpi\">\n            <div>\n              <div class=\"ra-side-kpi-label\">Satisfacci\u00f3<\/div>\n              <div class=\"ra-side-kpi-value\" id=\"rv-satisfaction-inline\">\u2014<\/div>\n              <div class=\"ra-side-kpi-text\">Lectura general de la satisfacci\u00f3 percebuda.<\/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\">Risc<\/div>\n              <div class=\"ra-side-kpi-value\" id=\"rv-risk-inline\">\u2014<\/div>\n              <div class=\"ra-side-kpi-text\">Pes de les ressenyes negatives sobre el total analitzat.<\/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\">Intensitat<\/div>\n              <div class=\"ra-side-kpi-value\" id=\"rv-intensity-inline\">\u2014<\/div>\n              <div class=\"ra-side-kpi-text\">C\u00e0rrega emocional detectada en les opinions.<\/div>\n            <\/div>\n            <div class=\"ra-side-kpi-visual\">\n              <div class=\"ra-mini-pill low\" id=\"rv-intensity-pill\">\n                <span class=\"dot\"><\/span>\n                <span id=\"rv-intensity-pill-text\">\u2014<\/span>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card glass-light\">\n        <div class=\"ra-card-label\">Distribuci\u00f3<\/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\">Positives<\/div>\n          <\/div>\n          <div class=\"ra-posneg-pill neu\">\n            <div class=\"ra-pill-num neu\" id=\"rv-neu-n\">0<\/div>\n            <div class=\"ra-pill-label\">Neutres<\/div>\n          <\/div>\n          <div class=\"ra-posneg-pill neg\">\n            <div class=\"ra-pill-num neg\" id=\"rv-neg-n\">0<\/div>\n            <div class=\"ra-pill-label\">Negatives<\/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\">Indicadors de negoci<\/div>\n        <div class=\"ra-metrics-grid\">\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Nota estimada<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-rating-est\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Lectura estimada sobre 5 a partir del sentiment detectat.<\/div>\n          <\/div>\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Satisfacci\u00f3<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-satisfaction\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Estimaci\u00f3 general de la satisfacci\u00f3 dels clients.<\/div>\n          <\/div>\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Longitud mitjana<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-avg-words\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Mitjana de paraules per ressenya analitzada.<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card soft\">\n        <div class=\"ra-card-label\">Lectura del to<\/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\">Risc reputacional<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-risk\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Volum de ressenyes negatives respecte al total analitzat.<\/div>\n          <\/div>\n          <div class=\"ra-metric-box\">\n            <div class=\"ra-metric-label\">Intensitat emocional<\/div>\n            <div class=\"ra-metric-value\" id=\"rv-intensity\">\u2014<\/div>\n            <div class=\"ra-metric-desc\">Nivell d\u2019enuig, tensi\u00f3 o entusiasme en les ressenyes.<\/div>\n          <\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card glass-light\">\n        <div class=\"ra-card-label\">Temes m\u00e9s esmentats<\/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\">Paraules clau detectades<\/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\">Problemes detectats<\/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\">Punts forts detectats<\/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>Risc 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            IA\n          <\/span>\n        <\/div>\n        <div class=\"ra-pain-box\">\n          <div class=\"ra-pain-title\">Qu\u00e8 pot estar passant<\/div>\n          <div class=\"ra-pain-text\" id=\"rv-commercial-risk\">\u2014<\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card glass-light\">\n        <div class=\"ra-card-label\">Patr\u00f3 detectat<\/div>\n        <div class=\"ra-action-box\">\n          <div class=\"ra-action-title\">Senyal dominant<\/div>\n          <div class=\"ra-action-main\" id=\"rv-pattern-main\">\u2014<\/div>\n          <div class=\"ra-action-sub\" id=\"rv-pattern-sub\">\u2014<\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"ra-card highlight\">\n        <div class=\"ra-card-label\">Primera acci\u00f3 recomanada<\/div>\n        <div class=\"ra-action-box\">\n          <div class=\"ra-action-title\">Qu\u00e8 faria ara<\/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\">Passos seg\u00fcents<\/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\">Impacte en reputaci\u00f3 i visibilitat<\/div>\n        <div class=\"ra-visual-split\" id=\"rv-visibility-grid\">\n          <div class=\"ra-visual-item\">\n            <div class=\"ra-visual-title\">Percepci\u00f3 del client<\/div>\n            <div class=\"ra-visual-text\" id=\"rv-visibility-perception\">\u2014<\/div>\n          <\/div>\n          <div class=\"ra-visual-item\">\n            <div class=\"ra-visual-title\">Visibilitat a les plataformes<\/div>\n            <div class=\"ra-visual-text\" id=\"rv-visibility-platforms\">\u2014<\/div>\n          <\/div>\n          <div class=\"ra-visual-item\">\n            <div class=\"ra-visual-title\">Captaci\u00f3 de noves ressenyes<\/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\">Resum executiu<\/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            Seg\u00fcent pas\n          <\/div>\n\n          <div class=\"review-conversion-title\">\n            Aquesta an\u00e0lisi \u00e9s nom\u00e9s el principi\n          <\/div>\n\n          <div class=\"review-conversion-lead\">\n            Detecta problemes a les teves ressenyes, respon amb IA i millora la teva puntuaci\u00f3 sense perdre hores llegint opinions.\n          <\/div>\n\n          <div class=\"review-conversion-text\">\n            Ja has vist una mostra de com et perceben els teus clients. Amb el programari de gesti\u00f3 de ressenyes de RepScan pots analitzar totes les teves ressenyes autom\u00e0ticament, centralitzar perfils, respondre opinions amb IA, resumir milers de comentaris en segons, agrupar-los per temes i protegir la teva puntuaci\u00f3.\n          <\/div>\n\n          <div class=\"review-benefits\">\n            <div class=\"review-benefit\">\u2713 Tauler \u00fanic amb Google, Trustpilot i altres plataformes<\/div>\n            <div class=\"review-benefit\">\u2713 Respostes massives a ressenyes amb IA<\/div>\n            <div class=\"review-benefit\">\u2713 Resum autom\u00e0tic de milers d\u2019opinions amb IA<\/div>\n            <div class=\"review-benefit\">\u2713 Eliminaci\u00f3 de ressenyes falses des de la plataforma<\/div>\n            <div class=\"review-benefit\">\u2713 Etiquetes per agrupar ressenyes per temes<\/div>\n            <div class=\"review-benefit\">\u2713 Targeta NFC gratu\u00efta per augmentar les teves ressenyes<\/div>\n            <div class=\"review-benefit\">\u2713 Millora el teu SEO local<\/div>\n          <\/div>\n\n          <div class=\"review-cta-row\">\n            <a class=\"review-btn-primary\" href=\"https:\/\/www.repscan.com\/ca\/programari-gestio-ressenyes\/\">Veure el programari de gesti\u00f3 de ressenyes<\/a>\n            <a class=\"review-btn-secondary\" href=\"https:\/\/www.repscan.com\/es\/formulario-contacto-saas\/\">Reservar una demo (10 min)<\/a>\n          <\/div>\n\n          <div class=\"review-note\">\n            M\u00e9s de 5.800 clients a 65 pa\u00efsos confien en RepScan.\n          <\/div>\n\n          <div class=\"review-clients-box\">\n            <div class=\"review-clients-label\">Algunes marques i entitats que ja treballen amb 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\u00e0lisi\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=\"Tancar\" 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\">Deixa\u2019ns les teves dades per veure els resultats<\/div>\n        <div class=\"ra-popup-subtitle\">En enviar el formulari veur\u00e0s el resultat a la pantalla.<\/div>\n      <\/div>\n    <\/div>\n    <div class=\"ra-popup-form-wrap\">\n      <iframe\n        id=\"ra-zoho-iframe\"\n        aria-label=\"ESP_ZOHO_FORM_ANALIZADOR-RESE\u00d1AS\"\n        frameborder=\"0\"\n        style=\"height:512px;width:100%;border:none;display:block;\"\n        src=\"https:\/\/forms.zohopublic.eu\/repscan\/form\/ESPZOHOFORMANALIZADORRESEAS\/formperma\/qGr0WukXeJUQvbPwtarPP02xQxci0L-3QdAeuD1PXLU\">\n      <\/iframe>\n    <\/div>\n  <\/div>\n<\/div>\n\n<!-- POPUP ANALIZANDO -->\n<div class=\"ra-thinking-overlay\" id=\"ra-thinking-overlay\" aria-hidden=\"true\">\n  <div class=\"ra-thinking-box\">\n    <div class=\"ra-thinking-ai-chip\">\n      <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 3l1.9 4.6L18 9.5l-4.1 1.9L12 16l-1.9-4.6L6 9.5l4.1-1.9L12 3z\"><\/path><\/svg>\n      Analitzant\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\">Analitzant ressenyes<\/div>\n    <div class=\"ra-thinking-text\">Estem processant el sentiment, els patrons repetits, els senyals de risc i les oportunitats de millora.<\/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    'perfectes','incre\u00efble','meravell\u00f3s','molt b\u00e9','bon\u00edssim','bon\u00edssima','recomanable','recomanat','recomanada','ho recomano',\n    'encantador','encantadora','agradable','amable','atents','atentes','eficient','professional','r\u00e0pid','r\u00e0pida','r\u00e0pids','r\u00e0pides',\n    'qualitat','cinc estrelles','satisfet','satisfeta','molt satisfets','encantat','encantada','delici\u00f3s','deliciosa',\n    'molt net','molt neta','puntuals','de confian\u00e7a','gran servei','bon tracte','molt bon tracte','tracte proper','tracte professional',\n    'atenci\u00f3 excel\u00b7lent','molt amable','bona relaci\u00f3 qualitat preu','qualitat preu','paga la pena','repetirem','repetiria','hi tornaria',\n    'gran feina','sense problemes','em va encantar','tot genial','molt contents amb el servei'\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    'p\u00e8ssim','p\u00e8ssima','desastre','vergonya','decepci\u00f3','decebuda','decebedor','dolents','dolentes','molt dolent','molt dolenta',\n    'abusiu','abusiva','robatori','estafador','estafadora','lladre','lent','tard','retard','retards','fred','freda','cremat','salat',\n    'no ho recomano','mai m\u00e9s','fastig\u00f3s','fastigosa','maleducat','maleducada','groller','grollera','antip\u00e0tic','antip\u00e0tica',\n    'enganyen','engany','enganyat','enganyada','mentida','mentiders','nyap','poc professional','desorganitzat','desorganitzada',\n    'lamentable','indignant','no contesten','no responen','sense soluci\u00f3','mala qualitat','baixa qualitat','car\u00edssim','preu abusiu',\n    'no hi tornar\u00e9','no hi tornaria','pitjor','una estrella','servei nefast','nefast','tracte p\u00e8ssim'\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    'compleix','res especial','normalet','normaleta','servei correcte','tracte correcte','menjar correcte','preu normal','sense sorpreses'\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      ['molt bon tracte', 6],['bon tracte', 4],['atenci\u00f3 excel\u00b7lent', 5],['molt recomanable', 4],['tot genial', 5],['tot molt b\u00e9', 5],\n      ['molt content', 4],['molt contenta', 4]\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      ['no ho recomano', 6],['no hi tornar\u00e9', 6],['mai m\u00e9s', 6],['tracte p\u00e8ssim', 6],['molt mal servei', 7],['mal servei', 5],\n      ['mala atenci\u00f3', 5],['\u00e9s una estafa', 10],['em van deixar tirat', 6],['no responen', 5],['no contesten', 5],['sense soluci\u00f3', 5]\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],['res especial', 2],['sense m\u00e9s', 2]\n    ]\n  };\n\n  var TOPICS = {\n    'Atenci\u00f3 al client': ['atenci\u00f3n','atencion','servicio','trato','amable','amables','personal','equipo','trabajadores','empleados','staff','camarero','camarera','camareros','camareras','atenci\u00f3','tracte','servei','equip','treballadors','empleats','cambrer','cambrera','cambrers','cambreres'],\n    'Velocitat \/ Terminis':  ['r\u00e1pido','rapido','r\u00e1pida','rapida','lento','lenta','tiempo','tardaron','espera','plazo','puntual','retraso','entrega','r\u00e0pid','r\u00e0pida','temps','van trigar','termini','retard','lliurament'],\n    'Qualitat':             ['calidad','resultado','acabado','trabajo','profesional','profesionales','impecable','detalle','comida','platos','carne','arroz','risotto','qualitat','resultat','acabat','feina','detall','menjar','plats','carn','arr\u00f2s'],\n    'Preu \/ Valor':      ['precio','caro','cara','barato','barata','coste','costo','dinero','econ\u00f3mico','economico','valor','40-50','50','\u20ac','preu','barat','diners','econ\u00f2mic'],\n    'Comunicaci\u00f3':        ['comunicaci\u00f3n','comunicacion','informaci\u00f3n','informacion','respuesta','responden','contacto','email','llamada','whatsapp','comunicaci\u00f3','informaci\u00f3','resposta','responen','contacte','correu','trucada'],\n    'Resoluci\u00f3':          ['problema','problemas','soluci\u00f3n','solucion','resolvieron','arreglaron','solucionaron','incidencia','problemes','soluci\u00f3','van resoldre','van arreglar','incid\u00e8ncia'],\n    'Recomanaci\u00f3':       ['recomiendo','recomendable','volver\u00eda','volveria','repetir\u00eda','repetiria','amigos','familia','recomano','recomanable','hi tornaria','amics','fam\u00edlia']\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 + ' car\u00e0cters \u00b7 ' + reviews + (reviews !== 1 ? ' ressenyes detectades' : ' ressenya detectada');\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:'Mitjana', 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:'Mitjana', 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\u00e8ncia alta', level:'high' };\n    }\n    if (riskPct >= 8 || score < 6.5) {\n      return { label:'Vigilar de prop', level:'mid' };\n    }\n    return { label:'Situaci\u00f3 estable', level:'low' };\n  }\n\n  function getActionForTopic(topic) {\n    if (topic === 'Atenci\u00f3 al client') return 'Revisar el tracte, els temps de resposta i com es contesten les ressenyes cr\u00edtiques.';\n    if (topic === 'Velocitat \/ Terminis') return 'Reduir l\u2019espera, revisar els pics de c\u00e0rrega i prioritzar les incid\u00e8ncies repetides.';\n    if (topic === 'Qualitat') return 'Revisar la consist\u00e8ncia del producte o servei i detectar errors repetits.';\n    if (topic === 'Preu \/ Valor') return 'Refor\u00e7ar la percepci\u00f3 de valor i captar m\u00e9s ressenyes positives recents.';\n    if (topic === 'Comunicaci\u00f3') return 'Millorar el seguiment, els missatges al client i la resposta davant les incid\u00e8ncies.';\n    if (topic === 'Resoluci\u00f3') return 'Tancar els problemes abans que es converteixin en noves ressenyes negatives.';\n    if (topic === 'Recomanaci\u00f3') return 'Aprofitar els clients satisfets per augmentar les ressenyes recents.';\n    return 'Revisar aquest punt abans que continu\u00ef creixent.';\n  }\n\n  function getImprovementActions(problemTopics, strengthTopics, riskPct) {\n    var actions = [];\n    if (riskPct >= 15) {\n      actions.push('Respondre primer les ressenyes m\u00e9s negatives i les m\u00e9s recents.');\n    } else if (riskPct >= 8) {\n      actions.push('Ordenar les ressenyes cr\u00edtiques per prioritat i corregir el patr\u00f3 principal.');\n    } else {\n      actions.push('Mantenir un seguiment setmanal perqu\u00e8 els problemes no guanyin pes.');\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 els punts forts detectats per captar m\u00e9s ressenyes positives.');\n    }\n\n    return actions.slice(0,4);\n  }\n\n  function buildSummary(total, pos, neg, neu, score, topTopics) {\n    var mainTone = pos >= neg ? 'majorit\u00e0riament positiu' : 'amb predomini negatiu';\n    if (pos === 0 && neg === 0) mainTone = 'neutre';\n    if (neu > pos && neu > neg) mainTone = 'mixt o neutre';\n\n    var topicStr = topTopics.length\n      ? topTopics.slice(0,3).map(function(t){ return '<strong>' + t[0] + '<\/strong>'; }).join(', ')\n      : 'diversos aspectes';\n\n    var verdict = score >= 7 ? 'La percepci\u00f3 general \u00e9s bona.' :\n                  score >= 5 ? 'La percepci\u00f3 \u00e9s mixta.' :\n                               'La percepci\u00f3 \u00e9s negativa.';\n\n    return 'S\u2019han analitzat <strong>' + total + ' ressenyes<\/strong>. El to \u00e9s ' + mainTone +\n           ' (<strong>' + pos + ' positives<\/strong>, ' + neg + ' negatives, ' + neu + ' neutres), ' +\n           'amb una puntuaci\u00f3 de sentiment de <strong>' + score + '\/10<\/strong>. ' +\n           'Els temes que m\u00e9s pesen s\u00f3n ' + topicStr + '. ' + verdict;\n  }\n\n  function buildVisibilityReadings(topTopics, strengthTopics, problemTopics, riskPct) {\n    var perception = 'Les ressenyes estan modelant la percepci\u00f3 del negoci al voltant de ' +\n      (topTopics.length ? '<strong>' + topTopics.slice(0,2).map(function(t){ return t[0]; }).join('<\/strong> i <strong>') + '<\/strong>' : 'diversos temes') + '.';\n\n    var platforms = riskPct >= 12\n      ? 'Si les ressenyes negatives continuen visibles i es repeteixen, la confian\u00e7a baixa i el negoci es torna m\u00e9s vulnerable davant d\u2019altres perfils.'\n      : 'La lectura actual afavoreix una percepci\u00f3 m\u00e9s estable, per\u00f2 conv\u00e9 mantenir un flux constant de ressenyes recents.';\n\n    var acquisition = strengthTopics.length\n      ? 'Els punts forts m\u00e9s repetits s\u00f3n <strong>' + strengthTopics.slice(0,2).map(function(t){ return t.topic; }).join('<\/strong> i <strong>') + '<\/strong>. S\u00f3n la base per demanar m\u00e9s ressenyes positives.'\n      : 'Necessites m\u00e9s senyals positius repetits per refor\u00e7ar la confian\u00e7a i atraure noves ressenyes favorables.';\n\n    if (problemTopics.length && riskPct >= 15) {\n      acquisition = 'Abans de demanar m\u00e9s ressenyes, conv\u00e9 corregir <strong>' + problemTopics[0].topic + '<\/strong> perqu\u00e8 no continu\u00ef generant fricci\u00f3.';\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 += 'Hi ha una proporci\u00f3 alta de ressenyes negatives. <strong>Aix\u00f2 pot frenar decisions de compra o contacte<\/strong> encara que el negoci tingui bones opinions positives.';\n    } else if (riskPct >= 10) {\n      text += 'Hi ha senyals de fricci\u00f3 visibles. <strong>Si no es corregeixen, poden pesar m\u00e9s que les ressenyes favorables<\/strong> i afeblir la confian\u00e7a.';\n    } else {\n      text += 'La situaci\u00f3 no sembla cr\u00edtica, per\u00f2 <strong>deixar cr\u00e9ixer petits problemes repetits<\/strong> pot afectar la percepci\u00f3 amb el temps.';\n    }\n\n    if (problemTopics.length) {\n      text += ' Ara mateix el principal focus de risc \u00e9s a <strong>' + problemTopics[0].topic + '<\/strong>.';\n    }\n\n    if (intensity.level === 'high') {\n      text += ' A m\u00e9s, el to emocional \u00e9s alt, aix\u00ed que cada ressenya cr\u00edtica t\u00e9 m\u00e9s capacitat de danyar la imatge percebuda.';\n    }\n\n    return text;\n  }\n\n  function getStarsMarkup(rating) {\n    var html = '';\n    for (var i = 1; i <= 5; i++) {\n      html += '<span class=\"star' + (i <= Math.round(rating) ? ' fill' : '') + '\">\u2605<\/span>';\n    }\n    return html;\n  }\n\n  function getPatternReading(problemTopics, strengthTopics, riskPct, total) {\n    if (problemTopics.length >= 2) {\n      return {\n        main: 'Les ressenyes cr\u00edtiques es concentren en ' + problemTopics[0].topic + ' i ' + problemTopics[1].topic + '.',\n        sub: 'No sembla un cas a\u00efllat. Hi ha un patr\u00f3 repetit que conv\u00e9 atacar abans que pesi m\u00e9s en la percepci\u00f3 global.'\n      };\n    }\n\n    if (problemTopics.length === 1) {\n      return {\n        main: 'El patr\u00f3 dominant apareix a ' + problemTopics[0].topic + '.',\n        sub: '\u00c9s el front que m\u00e9s est\u00e0 afectant ara mateix la lectura general de les ressenyes.'\n      };\n    }\n\n    if (strengthTopics.length >= 2) {\n      return {\n        main: 'Les ressenyes positives es basen sobretot en ' + strengthTopics[0].topic + ' i ' + strengthTopics[1].topic + '.',\n        sub: 'Aqu\u00ed hi ha una oportunitat clara per demanar m\u00e9s ressenyes i refor\u00e7ar la percepci\u00f3 del negoci.'\n      };\n    }\n\n    return {\n      main: 'Encara no hi ha un patr\u00f3 dominant prou clar.',\n      sub: 'Cal m\u00e9s volum o m\u00e9s senyals repetits per identificar amb m\u00e9s precisi\u00f3 qu\u00e8 pesa m\u00e9s.'\n    };\n  }\n\n  function getFirstAction(problemTopics, strengthTopics, riskPct) {\n    if (problemTopics.length) {\n      var main = 'Revisa primer ' + problemTopics[0].topic + '.';\n      var sub = getActionForTopic(problemTopics[0].topic);\n\n      if (problemTopics[0].topic === 'Atenci\u00f3 al client' || problemTopics[0].topic === 'Comunicaci\u00f3' || problemTopics[0].topic === 'Resoluci\u00f3') {\n        sub += ' Despr\u00e9s pots automatitzar part del seguiment i les respostes des del software.';\n      }\n\n      return {\n        main: main,\n        sub: sub,\n        links: [\n          { text:'Veure el programari de gesti\u00f3', url:'https:\/\/www.repscan.com\/ca\/programari-gestio-ressenyes\/' },\n          { text:'Reservar una demo gratu\u00efta', url:'https:\/\/www.repscan.com\/es\/formulario-contacto-saas\/' }\n        ]\n      };\n    }\n\n    if (strengthTopics.length) {\n      return {\n        main: 'Aprofita ' + strengthTopics[0].topic + ' per captar m\u00e9s ressenyes positives.',\n        sub: 'Demana m\u00e9s opinions recents i mant\u00e9n una resposta constant per refor\u00e7ar la percepci\u00f3 del negoci.',\n        links: [\n          { text:'Veure el programari de gesti\u00f3', url:'https:\/\/www.repscan.com\/ca\/programari-gestio-ressenyes\/' },\n          { text:'Reservar una demo gratu\u00efta', url:'https:\/\/www.repscan.com\/es\/formulario-contacto-saas\/' }\n        ]\n      };\n    }\n\n    return {\n      main: 'Comen\u00e7a per ordenar i respondre les ressenyes m\u00e9s recents.',\n      sub: 'Amb m\u00e9s volum i seguiment veur\u00e0s abans quin patr\u00f3 domina i quins canvis conv\u00e9 prioritzar.',\n      links: [\n        { text:'Respondre ressenyes amb IA', url:'https:\/\/www.repscan.com\/ca\/respondre-ressenyes-ia\/' },\n        { text:'Reservar una demo gratu\u00efta', url:'https:\/\/www.repscan.com\/es\/formulario-contacto-saas\/' }\n      ]\n    };\n  }\n\n  function getFastRead(score, riskPct, pos, neg, neu) {\n    if (score < 5) {\n      return 'La lectura actual \u00e9s <strong>delicada<\/strong>. Hi ha m\u00e9s fricci\u00f3 de la desitjable i conv\u00e9 intervenir abans que continu\u00ef creixent.';\n    }\n    if (riskPct >= 15) {\n      return 'Hi ha ressenyes positives, per\u00f2 <strong>el pes de les negatives ja \u00e9s visible<\/strong> i pot condicionar la decisi\u00f3 de nous clients.';\n    }\n    if (pos > neg) {\n      return 'La percepci\u00f3 \u00e9s <strong>acceptable o bona<\/strong>, tot i que encara hi ha marge per millorar la consist\u00e8ncia i captar m\u00e9s opinions favorables.';\n    }\n    return 'El negoci transmet una lectura <strong>mixta<\/strong>. Hi ha punts bons, per\u00f2 encara no pesen prou.';\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', function() { pendingAnalysis = null; closePopup(); });\n\n  document.getElementById('ra-popup-overlay').addEventListener('click', function(e) {\n    if (e.target === this) { pendingAnalysis = null; closePopup(); }\n  });\n\n  textarea.addEventListener('keydown', function(e) {\n    if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) {\n      btnAnalyze.click();\n    }\n  });\n\n  btnClear.addEventListener('click', function() {\n    textarea.value = '';\n    updateCounter();\n    document.getElementById('rv-results').classList.remove('visible');\n    textarea.focus();\n  });\n\n  window.addEventListener('message', function(event) {\n    if (event.data && event.data.constructor === String && event.data.indexOf('|') !== -1) {\n      var parts = event.data.split('|');\n      if (parts.length === 2 || parts.length === 3) {\n        var zf_ifrm_ht_nw = (parseInt(parts[1], 10) + 15) + 'px';\n        var iframe = document.getElementById('ra-zoho-iframe');\n        if (iframe && zf_ifrm_ht_nw && zf_ifrm_ht_nw !== 'NaNpx') iframe.style.height = zf_ifrm_ht_nw;\n        if (parts.length === 3) setTimeout(closePopupAndAnalyze, 250);\n      }\n    }\n\n    if (event.data && typeof event.data === 'string') {\n      try {\n        var msg = JSON.parse(event.data);\n        if (msg && (msg.action === 'formSubmit' || msg.status === 'success')) {\n          setTimeout(closePopupAndAnalyze, 800);\n        }\n      } catch(err) {}\n    }\n\n    if (event.data === 'submit' || event.data === 'formSubmit') {\n      setTimeout(closePopupAndAnalyze, 800);\n    }\n  }, false);\n\n  function setUrgencyChip(data) {\n    var chip = document.getElementById('rv-urgency-chip');\n    chip.className = 'ra-status-chip ' + data.level;\n    chip.textContent = data.label;\n  }\n\n  function fillList(id, items, formatter, emptyText) {\n    var el = document.getElementById(id);\n    el.innerHTML = '';\n    if (!items || !items.length) {\n      el.innerHTML = '<li>' + (emptyText || 'No hi ha prou senyals per ampliar la lectura.') + '<\/li>';\n      return;\n    }\n    items.forEach(function(item) {\n      var li = document.createElement('li');\n      li.innerHTML = formatter ? formatter(item) : item;\n      el.appendChild(li);\n    });\n  }\n\n  function setIntensityPill(intensity) {\n    var pill = document.getElementById('rv-intensity-pill');\n    var text = document.getElementById('rv-intensity-pill-text');\n    pill.className = 'ra-mini-pill ' + intensity.level;\n    text.textContent = intensity.label;\n  }\n\n  function setActionLinks(links) {\n    var el = document.getElementById('rv-action-links');\n    el.innerHTML = '';\n    if (!links || !links.length) return;\n\n    links.forEach(function(link) {\n      var a = document.createElement('a');\n      a.className = 'ra-reco-link';\n      a.href = link.url;\n      a.textContent = link.text;\n      el.appendChild(a);\n    });\n  }\n\n  function runAnalysis(reviews) {\n    var sentiments = reviews.map(analyzeReview);\n    var pos = sentiments.filter(function(s){ return s === 'pos'; }).length;\n    var neg = sentiments.filter(function(s){ return s === 'neg'; }).length;\n    var neu = sentiments.filter(function(s){ return s === 'neu'; }).length;\n    var total = reviews.length;\n\n    var rawScore = total > 0 ? ((pos * 9) + (neu * 5) + (neg * 2)) \/ total : 0;\n    var score = Math.round(rawScore * 10) \/ 10;\n\n    var topTopics = getTopics(reviews);\n    var keywords  = getKeywords(reviews, sentiments);\n    var topicStats = getTopicSentimentBreakdown(reviews, sentiments);\n    var problemTopics = getProblemTopics(topicStats);\n    var strengthTopics = getStrengthTopics(topicStats);\n\n    var ratingEst = Math.round((score \/ 2) * 10) \/ 10;\n    var satisfaction = getSatisfactionIndex(pos, neg, neu, total);\n    var riskPct = total ? Math.round((neg \/ total) * 100) : 0;\n    var neuPct = total ? Math.round((neu \/ total) * 100) : 0;\n    var posPct = total ? Math.round((pos \/ total) * 100) : 0;\n    var avgWords = getAvgWords(reviews);\n    var intensity = getEmotionalIntensity(reviews);\n    var urgency = getUrgency(score, riskPct, intensity);\n\n    var problemLines = problemTopics.map(function(item) {\n      return item.topic + ' (' + item.neg + ' mencions negatives)';\n    });\n\n    var strengthLines = strengthTopics.map(function(item) {\n      return item.topic + ' (' + item.pos + ' mencions positives)';\n    });\n\n    var actionLines = getImprovementActions(problemTopics, strengthTopics, riskPct);\n    var visibility = buildVisibilityReadings(topTopics, strengthTopics, problemTopics, riskPct);\n    var commercialRisk = buildCommercialRisk(score, riskPct, problemTopics, intensity);\n    var summaryHtml = buildSummary(total, pos, neg, neu, score, topTopics);\n    var patternReading = getPatternReading(problemTopics, strengthTopics, riskPct, total);\n    var firstAction = getFirstAction(problemTopics, strengthTopics, riskPct);\n    var fastRead = getFastRead(score, riskPct, pos, neg, neu);\n\n    var scoreEl  = document.getElementById('rv-score-num');\n    var barEl    = document.getElementById('rv-score-bar');\n    var verdictEl = document.getElementById('rv-score-verdict');\n\n    scoreEl.textContent = score;\n\n    var color = score >= 7 ? 'var(--ra-green)' : score >= 5 ? 'var(--ra-amber)' : 'var(--ra-red)';\n    scoreEl.style.color = color;\n    barEl.style.background = color;\n\n    verdictEl.textContent = score >= 7 ? '\u2726 Percepci\u00f3 positiva' :\n                            score >= 5 ? '\u25c8 Percepci\u00f3 mixta' :\n                                         '\u25c6 Percepci\u00f3 negativa';\n\n    setTimeout(function() { barEl.style.width = (score * 10) + '%'; }, 60);\n\n    document.getElementById('rv-pos-n').textContent = pos;\n    document.getElementById('rv-neu-n').textContent = neu;\n    document.getElementById('rv-neg-n').textContent = neg;\n\n    document.getElementById('rv-rating-est').textContent = ratingEst.toFixed(1) + '\/5';\n    document.getElementById('rv-rating-est-inline').textContent = ratingEst.toFixed(1) + '\/5';\n    document.getElementById('rv-satisfaction').textContent = satisfaction + '%';\n    document.getElementById('rv-satisfaction-inline').textContent = satisfaction + '%';\n    document.getElementById('rv-risk').textContent = riskPct + '%';\n    document.getElementById('rv-risk-inline').textContent = riskPct + '%';\n    document.getElementById('rv-intensity').textContent = intensity.label;\n    document.getElementById('rv-intensity-inline').textContent = intensity.label;\n    document.getElementById('rv-avg-words').textContent = avgWords;\n    document.getElementById('rv-score-fast-read').innerHTML = fastRead;\n\n    document.getElementById('rv-stars').innerHTML = getStarsMarkup(ratingEst);\n    document.getElementById('rv-mini-stars').innerHTML = getStarsMarkup(ratingEst);\n\n    setUrgencyChip(urgency);\n    setIntensityPill(intensity);\n\n    setTimeout(function() {\n      document.getElementById('rv-bar-pos').style.width = total ? (pos \/ total * 100) + '%' : '0%';\n      document.getElementById('rv-bar-neu').style.width = total ? (neu \/ total * 100) + '%' : '0%';\n      document.getElementById('rv-bar-neg').style.width = total ? (neg \/ total * 100) + '%' : '0%';\n      document.getElementById('rv-mini-risk-bar').style.width = riskPct + '%';\n    }, 60);\n\n    var topicsEl = document.getElementById('rv-topics');\n    topicsEl.innerHTML = '';\n    var maxCount = topTopics.length ? topTopics[0][1] : 1;\n\n    if (topTopics.length === 0) {\n      topicsEl.innerHTML = '<span style=\"font-family:Courier New,monospace;font-size:0.78rem;color:var(--ra-muted)\">No s\u2019han detectat temes amb prou mencions.<\/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)\">Sense paraules clau destacades.<\/span>';\n    }\n\n    fillList('rv-problems', problemLines, function(item) {\n      return '<strong>' + item + '<\/strong>';\n    }, 'No es detecten problemes repetits amb prou pes.');\n\n    fillList('rv-strengths', strengthLines, function(item) {\n      return '<strong>' + item + '<\/strong>';\n    }, 'Encara no hi ha punts forts repetits amb prou senyal.');\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\">Comen\u00e7a avui mateix amb el programari de ressenyes de 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<style>\n.rs-ctas{display:flex;gap:14px;flex-wrap:wrap;align-items:center;margin:8px 0 0}\n.rs-ctas.center{justify-content:center}\n.rs-ctas a{display:inline-flex;align-items:center;justify-content:center;gap:9px;font-size:16px;font-weight:600;padding:15px 30px;border-radius:10px;text-decoration:none!important;line-height:1.2;transition:background .16s,border-color .16s,box-shadow .18s}\n.rs-ctas .rs-btn{color:#fff!important;background:#294eff!important;box-shadow:0 1px 2px rgba(60,64,67,.18),0 1px 3px 1px rgba(60,64,67,.08)}\n.rs-ctas .rs-btn:hover{background:#1e3ad6!important;box-shadow:0 1px 3px rgba(60,64,67,.2),0 4px 8px 3px rgba(60,64,67,.1)}\n.rs-ctas .rs-ghost{color:#294eff!important;background:#fff!important;border:1px solid #dadce0}\n.rs-ctas .rs-ghost:hover{background:#e9edff!important;border-color:#d2e3fc}\n@media(max-width:720px){.rs-ctas a{width:100%}}\n<\/style>\n<div class=\"rs-ctas\">\n  <a class=\"rs-btn\" href=\"https:\/\/www.repscan.com\/ca\/programari-gestio-ressenyes\/\">Veure el programari de gesti\u00f3 de ressenyes<\/a>\n  <a class=\"rs-ghost\" href=\"https:\/\/www.repscan.com\/es\/eshop\/#sidebar-triki\">Veure preus<\/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<h2 class=\"elementor-heading-title elementor-size-default\">Preguntes freq\u00fcents sobre l\u2019analitzador de ressenyes amb IA<\/h2>\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\">Qu\u00e8 analitza exactament aquesta eina?<\/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>Pren el conjunt de ressenyes que enganxes i calcula el sentiment general, la distribuci\u00f3 entre positives, neutres i negatives, la nota estimada, els temes que m\u00e9s es repeteixen, les paraules clau, els punts forts i els problemes detectats. Acaba amb una lectura del risc comercial i un resum executiu.<\/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\">Com copio les ressenyes per analitzar-les?<\/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>Obre la teva fitxa a Google Maps, Trustpilot o la plataforma que facis servir, selecciona el text de les ressenyes i enganxa\u2019l al quadre. L\u2019analitzador separa les ressenyes de manera autom\u00e0tica. Si prefereixes controlar el format, tria la font al selector abans d\u2019analitzar.<\/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\">Puc saber si una ressenya concreta es pot eliminar?<\/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>Aquest analitzador treballa sobre el conjunt de les teves ressenyes. Per valorar una ressenya negativa concreta i saber si t\u00e9 base per ser retirada, fes servir el <a href=\"https:\/\/www.repscan.com\/ca\/comprovador-ressenyes-eliminables-google\/\">comprovador de ressenyes eliminables<\/a>: enganxes el text i reps una valoraci\u00f3 inicial amb els motius detectats.<\/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\">Es guarden les meves ressenyes o les meves dades?<\/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>L\u2019an\u00e0lisi es fa al teu navegador i el text de les ressenyes no s\u2019envia als nostres servidors. Les dades de contacte que deixes al formulari es tracten d\u2019acord amb la nostra pol\u00edtica de privadesa per poder ajudar-te amb la gesti\u00f3 de les teves ressenyes.<\/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-9535\" class=\"elementor-tab-title\" data-tab=\"5\" role=\"button\" aria-controls=\"elementor-tab-content-9535\" 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\">Quina difer\u00e8ncia hi ha amb el programari de gesti\u00f3 de ressenyes?<\/a>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"elementor-tab-content-9535\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"5\" role=\"region\" aria-labelledby=\"elementor-tab-title-9535\"><p>L\u2019analitzador \u00e9s una mostra gratu\u00efta i puntual. El <a href=\"https:\/\/www.repscan.com\/ca\/programari-gestio-ressenyes\/\">programari de gesti\u00f3 de ressenyes<\/a> centralitza totes les teves plataformes en un tauler, analitza les ressenyes de manera cont\u00ednua, respon amb IA, agrupa per temes i permet sol\u00b7licitar l\u2019eliminaci\u00f3 de ressenyes falses des de la mateixa plataforma.<\/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{background:#fff!important}\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":"Analitzador de ressenyes amb IA gratis | RepScan","_yoast_wpseo_metadesc":"Enganxa les ressenyes del teu negoci i obt\u00e9n el sentiment, els temes m\u00e9s mencionats i un resum executiu amb IA.","_templately_pack_id":"","_templately_imported_at":"","_templately_source":"","_templately_import_session_id":"","_mbp_gutenberg_autopost":false,"footnotes":""},"class_list":["post-57952","page","type-page","status-publish","infinite-scroll-item"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Analitzador de ressenyes amb IA gratis | RepScan<\/title>\n<meta name=\"description\" content=\"Enganxa les ressenyes del teu negoci i obt\u00e9n el sentiment, els temes m\u00e9s mencionats i un resum executiu amb IA.\" \/>\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\/ca\/analitzador-ressenyes-ia\/\" \/>\n<meta property=\"og:locale\" content=\"ca_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Analitzador de ressenyes amb IA gratis | RepScan\" \/>\n<meta property=\"og:description\" content=\"Enganxa les ressenyes del teu negoci i obt\u00e9n el sentiment, els temes m\u00e9s mencionats i un resum executiu amb IA.\" \/>\n<meta property=\"og:url\" content=\"\/\" \/>\n<meta property=\"og:site_name\" content=\"RepScan\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-07T09:12:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.repscan.com\/wp-content\/uploads\/2024\/12\/RepScan_Heros_2025_Home_1080x608.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1080\" \/>\n\t<meta property=\"og:image:height\" content=\"608\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\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\\\/ca\\\/analitzador-ressenyes-ia\\\/\",\"url\":\"https:\\\/\\\/www.repscan.com\\\/ca\\\/analitzador-ressenyes-ia\\\/\",\"name\":\"Analitzador de ressenyes amb IA gratis | RepScan\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.repscan.com\\\/ca\\\/#website\"},\"datePublished\":\"2026-06-22T15:36:36+00:00\",\"dateModified\":\"2026-10-07T09:12:52+00:00\",\"description\":\"Enganxa les ressenyes del teu negoci i obt\u00e9n el sentiment, els temes m\u00e9s mencionats i un resum executiu amb IA.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.repscan.com\\\/ca\\\/analitzador-ressenyes-ia\\\/#breadcrumb\"},\"inLanguage\":\"ca\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.repscan.com\\\/ca\\\/analitzador-ressenyes-ia\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/ca\\\/analitzador-ressenyes-ia\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Inici\",\"item\":\"https:\\\/\\\/www.repscan.com\\\/ca\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Analitzador de ressenyes amb IA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/ca\\\/#website\",\"url\":\"https:\\\/\\\/www.repscan.com\\\/ca\\\/\",\"name\":\"RepScan\",\"description\":\"Plataforma de Reputaci\u00f3 Digital\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.repscan.com\\\/ca\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.repscan.com\\\/ca\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ca\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/ca\\\/#organization\",\"name\":\"RepScan\",\"url\":\"https:\\\/\\\/www.repscan.com\\\/ca\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ca\",\"@id\":\"https:\\\/\\\/www.repscan.com\\\/ca\\\/#\\\/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\\\/ca\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"legalName\":\"RepScan Technology, S.L.\",\"taxID\":\"B42758102\",\"foundingDate\":\"2021\",\"email\":\"info@repscan.com\",\"telephone\":\"+34 936 386 559\",\"address\":{\"@type\":\"PostalAddress\",\"streetAddress\":\"Carrer de Calvet, 30, 5\u00ba 2\u00aa\",\"postalCode\":\"08021\",\"addressLocality\":\"Barcelona\",\"addressRegion\":\"Barcelona\",\"addressCountry\":\"ES\"},\"location\":[{\"@type\":\"Place\",\"name\":\"RepScan Barcelona\",\"address\":{\"@type\":\"PostalAddress\",\"streetAddress\":\"Carrer de Calvet, 30, 5\u00ba 2\u00aa\",\"postalCode\":\"08021\",\"addressLocality\":\"Barcelona\",\"addressCountry\":\"ES\"}},{\"@type\":\"Place\",\"name\":\"RepScan Los Angeles\",\"address\":{\"@type\":\"PostalAddress\",\"streetAddress\":\"461 W. Sixth St. Suite 201\",\"addressLocality\":\"San Pedro\",\"addressRegion\":\"CA\",\"postalCode\":\"90731\",\"addressCountry\":\"US\"}},{\"@type\":\"Place\",\"name\":\"RepScan Miami\",\"address\":{\"@type\":\"PostalAddress\",\"streetAddress\":\"6380 NE 4th Ave\",\"addressLocality\":\"Miami\",\"addressRegion\":\"FL\",\"postalCode\":\"33138\",\"addressCountry\":\"US\"}}],\"contactPoint\":[{\"@type\":\"ContactPoint\",\"contactType\":\"customer service\",\"telephone\":\"+34 936 386 559\",\"email\":\"info@repscan.com\",\"areaServed\":\"ES\",\"availableLanguage\":[\"es\",\"ca\",\"en\"]},{\"@type\":\"ContactPoint\",\"contactType\":\"customer service\",\"telephone\":\"+1 323 977 7288\",\"areaServed\":\"US\",\"availableLanguage\":[\"en\",\"es\"]}],\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/company\\\/repscan\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@repscantechnology\",\"https:\\\/\\\/x.com\\\/repscan\",\"https:\\\/\\\/www.instagram.com\\\/repscan\\\/\",\"https:\\\/\\\/www.facebook.com\\\/repscan\",\"https:\\\/\\\/www.tiktok.com\\\/@repscan\",\"https:\\\/\\\/www.wikidata.org\\\/wiki\\\/Q141673775\"],\"founder\":[{\"@type\":\"Person\",\"name\":\"Josep Coll\",\"jobTitle\":\"Presidente\"},{\"@type\":\"Person\",\"name\":\"Mar Jufresa\",\"jobTitle\":\"CPO\"}],\"employee\":[{\"@type\":\"Person\",\"name\":\"Amadeo Sarra\",\"jobTitle\":\"CEO\"}],\"description\":\"RepScan es una empresa tecnol\u00f3gica espa\u00f1ola que elimina de internet el contenido que da\u00f1a la reputaci\u00f3n de personas y empresas: rese\u00f1as falsas, suplantaciones de identidad, contenido \u00edntimo difundido sin consentimiento y datos personales expuestos.\",\"knowsAbout\":[\"Eliminaci\u00f3n de contenido de internet\",\"Reputaci\u00f3n online\",\"Eliminaci\u00f3n de rese\u00f1as falsas\",\"Derecho al olvido\",\"Suplantaci\u00f3n de identidad\",\"Protecci\u00f3n de datos personales\",\"Contenido \u00edntimo no consentido\",\"Deepfakes\"],\"areaServed\":\"Worldwide\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Analitzador de ressenyes amb IA gratis | RepScan","description":"Enganxa les ressenyes del teu negoci i obt\u00e9n el sentiment, els temes m\u00e9s mencionats i un resum executiu amb IA.","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\/ca\/analitzador-ressenyes-ia\/","og_locale":"ca_ES","og_type":"article","og_title":"Analitzador de ressenyes amb IA gratis | RepScan","og_description":"Enganxa les ressenyes del teu negoci i obt\u00e9n el sentiment, els temes m\u00e9s mencionats i un resum executiu amb IA.","og_url":"\/","og_site_name":"RepScan","article_modified_time":"2026-10-07T09:12:52+00:00","og_image":[{"width":1080,"height":608,"url":"https:\/\/www.repscan.com\/wp-content\/uploads\/2024\/12\/RepScan_Heros_2025_Home_1080x608.png","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.repscan.com\/ca\/analitzador-ressenyes-ia\/","url":"https:\/\/www.repscan.com\/ca\/analitzador-ressenyes-ia\/","name":"Analitzador de ressenyes amb IA gratis | RepScan","isPartOf":{"@id":"https:\/\/www.repscan.com\/ca\/#website"},"datePublished":"2026-06-22T15:36:36+00:00","dateModified":"2026-10-07T09:12:52+00:00","description":"Enganxa les ressenyes del teu negoci i obt\u00e9n el sentiment, els temes m\u00e9s mencionats i un resum executiu amb IA.","breadcrumb":{"@id":"https:\/\/www.repscan.com\/ca\/analitzador-ressenyes-ia\/#breadcrumb"},"inLanguage":"ca","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.repscan.com\/ca\/analitzador-ressenyes-ia\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.repscan.com\/ca\/analitzador-ressenyes-ia\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Inici","item":"https:\/\/www.repscan.com\/ca\/"},{"@type":"ListItem","position":2,"name":"Analitzador de ressenyes amb IA"}]},{"@type":"WebSite","@id":"https:\/\/www.repscan.com\/ca\/#website","url":"https:\/\/www.repscan.com\/ca\/","name":"RepScan","description":"Plataforma de Reputaci\u00f3 Digital","publisher":{"@id":"https:\/\/www.repscan.com\/ca\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.repscan.com\/ca\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ca"},{"@type":"Organization","@id":"https:\/\/www.repscan.com\/ca\/#organization","name":"RepScan","url":"https:\/\/www.repscan.com\/ca\/","logo":{"@type":"ImageObject","inLanguage":"ca","@id":"https:\/\/www.repscan.com\/ca\/#\/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\/ca\/#\/schema\/logo\/image\/"},"legalName":"RepScan Technology, S.L.","taxID":"B42758102","foundingDate":"2021","email":"info@repscan.com","telephone":"+34 936 386 559","address":{"@type":"PostalAddress","streetAddress":"Carrer de Calvet, 30, 5\u00ba 2\u00aa","postalCode":"08021","addressLocality":"Barcelona","addressRegion":"Barcelona","addressCountry":"ES"},"location":[{"@type":"Place","name":"RepScan Barcelona","address":{"@type":"PostalAddress","streetAddress":"Carrer de Calvet, 30, 5\u00ba 2\u00aa","postalCode":"08021","addressLocality":"Barcelona","addressCountry":"ES"}},{"@type":"Place","name":"RepScan Los Angeles","address":{"@type":"PostalAddress","streetAddress":"461 W. Sixth St. Suite 201","addressLocality":"San Pedro","addressRegion":"CA","postalCode":"90731","addressCountry":"US"}},{"@type":"Place","name":"RepScan Miami","address":{"@type":"PostalAddress","streetAddress":"6380 NE 4th Ave","addressLocality":"Miami","addressRegion":"FL","postalCode":"33138","addressCountry":"US"}}],"contactPoint":[{"@type":"ContactPoint","contactType":"customer service","telephone":"+34 936 386 559","email":"info@repscan.com","areaServed":"ES","availableLanguage":["es","ca","en"]},{"@type":"ContactPoint","contactType":"customer service","telephone":"+1 323 977 7288","areaServed":"US","availableLanguage":["en","es"]}],"sameAs":["https:\/\/www.linkedin.com\/company\/repscan\/","https:\/\/www.youtube.com\/@repscantechnology","https:\/\/x.com\/repscan","https:\/\/www.instagram.com\/repscan\/","https:\/\/www.facebook.com\/repscan","https:\/\/www.tiktok.com\/@repscan","https:\/\/www.wikidata.org\/wiki\/Q141673775"],"founder":[{"@type":"Person","name":"Josep Coll","jobTitle":"Presidente"},{"@type":"Person","name":"Mar Jufresa","jobTitle":"CPO"}],"employee":[{"@type":"Person","name":"Amadeo Sarra","jobTitle":"CEO"}],"description":"RepScan es una empresa tecnol\u00f3gica espa\u00f1ola que elimina de internet el contenido que da\u00f1a la reputaci\u00f3n de personas y empresas: rese\u00f1as falsas, suplantaciones de identidad, contenido \u00edntimo difundido sin consentimiento y datos personales expuestos.","knowsAbout":["Eliminaci\u00f3n de contenido de internet","Reputaci\u00f3n online","Eliminaci\u00f3n de rese\u00f1as falsas","Derecho al olvido","Suplantaci\u00f3n de identidad","Protecci\u00f3n de datos personales","Contenido \u00edntimo no consentido","Deepfakes"],"areaServed":"Worldwide"}]}},"_links":{"self":[{"href":"https:\/\/www.repscan.com\/ca\/wp-json\/wp\/v2\/pages\/57952","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.repscan.com\/ca\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.repscan.com\/ca\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.repscan.com\/ca\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/www.repscan.com\/ca\/wp-json\/wp\/v2\/comments?post=57952"}],"version-history":[{"count":0,"href":"https:\/\/www.repscan.com\/ca\/wp-json\/wp\/v2\/pages\/57952\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.repscan.com\/ca\/wp-json\/wp\/v2\/media?parent=57952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}