{"id":11960,"date":"2026-06-22T09:32:07","date_gmt":"2026-06-22T07:32:07","guid":{"rendered":"https:\/\/vincesconsulting.com\/tecnologia\/wats\/"},"modified":"2026-09-04T12:15:14","modified_gmt":"2026-09-04T10:15:14","slug":"wats","status":"publish","type":"page","link":"https:\/\/vincesconsulting.com\/pt-pt\/tecnologia\/wats\/","title":{"rendered":"Wats"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"11960\" class=\"elementor elementor-11960 elementor-11019\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fb775a4 e-con-full e-flex e-con e-parent\" data-id=\"fb775a4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5d28f2b elementor-widget elementor-widget-html\" data-id=\"5d28f2b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div>\n\n<!--\n  Dashboard Vinces \u00b7 p\u00e1gina standalone por producto\n  Generado: 2026-05-13T10:34:51.200Z\n  Endpoint API: https:\/\/vision360.vincesconsulting.com\/api\/dashboard-publico\/wats\/\n\n  C\u00f3mo integrarlo en WordPress:\n    1. Editor de la p\u00e1gina \u2192 bloque 'HTML personalizado'.\n    2. Pega el fichero completo (todo, incluyendo <html>, <head>, <body>).\n       En la mayor\u00eda de temas WP basta con pegar a partir de <body>.\n    3. Aseg\u00farate de que el dominio WP est\u00e1 incluido en CORS del backend.\n    4. El cliente refresca cada 30 min; el backend cachea 1h.\n-->\n\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n<title>WATS: Temas de conversa dos partidos pol\u00edticos \u00b7 Intelig\u00eancia social \u00b7 Vinces<\/title>\n<meta name=\"description\" content=\"WATS, a intelig\u00eancia social da Vinces. An\u00e1lise autom\u00e1tica dos principais temas que os decisores pol\u00edticos e os grupos parlamentares est\u00e3o a abordar nas redes sociais e nos meios de comunica\u00e7\u00e3o. Classificados por setor e sentimento (positivo, negativo, neutro ou misto).\">\n<meta name=\"keywords\" content=\"WATS, intelig\u00eancia social e pol\u00edtica, temas de conversa, redes sociais, X, Twitter, LinkedIn, sentimento positivo e negativo, an\u00e1lise de reputa\u00e7\u00e3o, narrativas pol\u00edticas, monitoriza\u00e7\u00e3o dos meios de comunica\u00e7\u00e3o, decisores pol\u00edticos, o que dizem o PSOE, o PP, o VOX e o Sumar, Vinces Consulting\">\n<meta name=\"author\" content=\"Vinces Consulting\">\n<meta name=\"robots\" content=\"index,follow,max-image-preview:large,max-snippet:-1\">\n<link rel=\"canonical\" href=\"https:\/\/vincesconsulting.com\/wats\/\">\n\n<meta property=\"og:type\" content=\"site\">\n<meta property=\"og:site_name\" content=\"Vinces Consulting\">\n<meta property=\"og:title\" content=\"WATS \u00b7 Intelig\u00eancia social e pol\u00edtica \u00b7 Vinces\">\n<meta property=\"og:description\" content=\"Temas de discuss\u00e3o dos partidos pol\u00edticos identificados nas redes sociais e nos meios de comunica\u00e7\u00e3o, por \u00e1rea e tom.\">\n<meta property=\"og:locale\" content=\"es_ES\">\n<meta property=\"og:url\" content=\"https:\/\/vincesconsulting.com\/wats\/\">\n<meta name=\"twitter:card\" content=\"imagem_resumo_grande\">\n<meta name=\"twitter:title\" content=\"WATS \u00b7 Intelig\u00eancia social\">\n<meta name=\"twitter:description\" content=\"O que dizem os decisores nas redes sociais: temas, frequ\u00eancia e sentimento.\">\n\n<script type=\"application\/ld+json\" id=\"ld-json-page\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"WebPage\",\n  \"name\": \"WATS \u00b7 Inteligencia social pol\u00edtica\",\n  \"description\": \"Principales temas de conversaci\u00f3n de los decisores pol\u00edticos en redes sociales y medios digitales, clasificados por \u00e1mbito sectorial y sentimiento.\",\n  \"inLanguage\": \"es\",\n  \"isPartOf\": {\"@type\":\"WebSite\",\"name\":\"Vinces Consulting\",\"url\":\"https:\/\/vincesconsulting.com\"},\n  \"publisher\": {\"@type\":\"Organization\",\"name\":\"Vinces Consulting\",\"url\":\"https:\/\/vincesconsulting.com\",\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/vinces-consulting\/\"]},\n  \"breadcrumb\": {\"@type\":\"BreadcrumbList\",\"itemListElement\":[\n    {\"@type\":\"ListItem\",\"position\":1,\"name\":\"Inicio\",\"item\":\"https:\/\/vincesconsulting.com\/\"},\n    {\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tecnolog\u00eda\",\"item\":\"https:\/\/vincesconsulting.com\/tecnologia\/\"},\n    {\"@type\":\"ListItem\",\"position\":3,\"name\":\"WATS\"}\n  ]}\n}\n<\/script>\n<script type=\"application\/ld+json\" id=\"ld-json-faq\">\n{\n  \"@context\": \"https:\/\/schema.org\",\n  \"@type\": \"FAQPage\",\n  \"mainEntity\": [\n    {\"@type\":\"Question\",\"name\":\"\u00bfDe qu\u00e9 temas hablan los grupos pol\u00edticos en redes sociales?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"WATS detecta y agrupa los temas m\u00e1s tratados por decisores pol\u00edticos en redes sociales por \u00e1mbito (sanidad, vivienda, econom\u00eda, educaci\u00f3n, fiscalidad, medio ambiente, energ\u00eda, social, infraestructuras, pol\u00edtica) y sentimiento (positivo, negativo, neutro o mixto).\"}},\n    {\"@type\":\"Question\",\"name\":\"\u00bfQu\u00e9 redes monitoriza WATS?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"X (Twitter), LinkedIn, Facebook, Instagram, YouTube, TikTok, Telegram p\u00fablico, blogs pol\u00edticos y medios digitales.\"}},\n    {\"@type\":\"Question\",\"name\":\"\u00bfWATS detecta crisis reputacionales?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"S\u00ed. WATS alerta cuando un tema asociado a tu organizaci\u00f3n (o a tu sector) entra en una din\u00e1mica negativa o de viralizaci\u00f3n r\u00e1pida.\"}},\n    {\"@type\":\"Question\",\"name\":\"\u00bfWATS hace an\u00e1lisis comparativo entre partidos?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"S\u00ed. Puedes comparar c\u00f3mo PSOE, PP, VOX, Sumar, ERC, Junts, EH Bildu, PNV o cualquier grupo aborda un tema, con qu\u00e9 intensidad y con qu\u00e9 sentimiento.\"}}\n  ]\n}\n<\/script>\n\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin=\"\">\n<link rel=\"stylesheet\" href=\"https:\/\/fonts.googleapis.com\/css2?family=Libre+Franklin:wght@400;500;600;700&family=Manrope:wght@500;600;700;800&family=Lato:wght@400;700&display=swap\">\n<script defer src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js@4.4.1\/dist\/chart.umd.min.js\"><\/script>\n\n<style>\n\/* =========================================================\n   Vinces \u00b7 Dashboards p\u00fablicos \u2014 capa visual redesign\n   Mantiene todas las clases del HTML\/JS original e\n   incorpora la identidad de vincesconsulting.com (hero\n   navy, kicker naranja, tipograf\u00eda display, CTAs p\u00edldora).\n   ========================================================= *\/\n:root{\n  --navy:#1F2547;\n  --navy-deep:#161A36;\n  --navy-light:#2A3158;\n  --navy-soft:#E9ECF3;\n  --orange:#F3A53A;\n  --orange-soft:#FFF1DA;\n  --green:#1FA886;\n  --bg:#EEF1F3;\n  --bg-alt:#F6F8FA;\n  --card:#FFFFFF;\n  --ink:#1F2547;\n  --ink-soft:#5A6076;\n  --muted:#8A90A3;\n  --line:#E2E6EE;\n  --line-soft:#EDF0F5;\n  --good:#1FA886;\n  --warn:#E5A040;\n  --bad:#C0392B;\n\n  \/* Aliases para mantener compatibilidad con el CSS original *\/\n  --vinces-primary:var(--navy);\n  --vinces-secondary:var(--orange);\n  --vinces-dark:var(--navy-deep);\n  --panel:var(--card);\n  --panel-soft:var(--bg-alt);\n  --brand:var(--navy);\n  --brand-soft:var(--navy-soft);\n  --brand-light:var(--navy-light);\n  --accent:var(--orange);\n  --accent-soft:var(--orange-soft);\n  --accent-dark:#D88E25;\n\n  --radius:18px;\n  --radius-sm:10px;\n  --radius-pill:999px;\n  --shadow:0 1px 2px rgba(31,37,71,.04), 0 8px 24px rgba(31,37,71,.06);\n  --shadow-lg:0 4px 12px rgba(31,37,71,.06), 0 24px 60px rgba(31,37,71,.12);\n\n  --hm-0:#F1F3F7;--hm-1:#DDE2EE;--hm-2:#B8C2D9;\n  --hm-3:#7889B0;--hm-4:#42507A;--hm-5:#1F2547;\n\n  --font-display:\"Libre Franklin\",-apple-system,BlinkMacSystemFont,sans-serif;\n  --font-body:\"Lato\",\"Libre Franklin\",-apple-system,BlinkMacSystemFont,sans-serif;\n}\n\n*{box-sizing:border-box}\nhtml,body{margin:0;padding:0}\nbody{\n  font-family:var(--font-body);\n  background:var(--bg);\n  color:var(--ink);\n  line-height:1.65;\n  -webkit-font-smoothing:antialiased;\n  text-rendering:optimizeLegibility;\n}\n\n\/* =========================================================\n   HERO full-bleed (estilo Vinces)\n   ========================================================= *\/\n.vc-hero{\n  position:relative;\n  background:var(--navy);\n  color:#fff;\n  padding:96px 24px 88px;\n  overflow:hidden;\n}\n.vc-hero::before{\n  content:\"\";\n  position:absolute;inset:0;\n  background:\n    radial-gradient(circle at 88% 18%, rgba(243,165,58,.10), transparent 45%),\n    radial-gradient(circle at 8% 95%, rgba(31,168,134,.07), transparent 50%);\n  pointer-events:none;\n}\n.vc-hero::after{\n  content:\"\";\n  position:absolute;left:0;right:0;bottom:0;height:1px;\n  background:linear-gradient(90deg, transparent, rgba(243,165,58,.45), transparent);\n}\n.vc-hero-inner{\n  position:relative;\n  max-width:1240px;margin:0 auto;\n  display:grid;grid-template-columns:1fr;gap:28px;\n}\n@media(min-width:880px){\n  .vc-hero-inner{grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:48px}\n}\n.vc-kicker{\n  display:inline-block;\n  color:var(--orange);\n  font-family:var(--font-display);\n  font-weight:700;font-size:.78rem;\n  letter-spacing:.18em;text-transform:uppercase;\n  margin:0 0 22px;line-height:1.2;\n}\n.vc-kicker::before{content:\"\/\/ \"}\n.vc-hero h1{\n  font-family:var(--font-display);\n  font-size:clamp(2.4rem,5.6vw,4.8rem);\n  font-weight:800;\n  letter-spacing:-.035em;\n  line-height:.98;\n  margin:0 0 24px;\n  color:#fff;\n  text-wrap:balance;\n}\n.vc-hero-lead{\n  font-size:clamp(1rem,1.25vw,1.15rem);\n  color:rgba(255,255,255,.78);\n  max-width:680px;\n  line-height:1.55;\n  margin:0 0 28px;\n}\n.vc-hero-lead strong{color:#fff;font-weight:600}\n.vc-hero-meta{\n  display:inline-flex;align-items:center;gap:10px;\n  background:rgba(255,255,255,.05);\n  border:1px solid rgba(255,255,255,.14);\n  padding:9px 18px;\n  border-radius:999px;\n  font-size:.8rem;\n  color:rgba(255,255,255,.85);\n  backdrop-filter:blur(6px);\n}\n.vc-hero-meta .dot{\n  width:8px;height:8px;border-radius:50%;\n  background:#4ADE80;\n  box-shadow:0 0 0 4px rgba(74,222,128,.18);\n}\n.vc-hero-meta.err .dot{background:#FCA5A5;box-shadow:0 0 0 4px rgba(252,165,165,.18)}\n.vc-hero-meta.err{color:#FCA5A5;border-color:rgba(252,165,165,.25)}\n\n.vc-hero-cta{\n  display:inline-flex;align-items:center;gap:14px;\n  background:#fff;color:var(--navy);\n  padding:14px 16px 14px 26px;\n  border-radius:999px;\n  text-decoration:none;\n  font-family:var(--font-display);\n  font-weight:700;font-size:1.45rem;\n  transition:transform .15s ease, box-shadow .2s ease;\n  align-self:start;\n}\n.vc-hero-cta:hover{transform:translateY(-2px);box-shadow:0 10px 24px rgba(0,0,0,.25)}\n.vc-hero-cta .ico{\n  width:30px;height:30px;border-radius:50%;\n  background:var(--navy);color:#fff;\n  display:inline-flex;align-items:center;justify-content:center;\n  font-size:1.45rem;font-weight:400;\n  transition:transform .2s ease;\n}\n.vc-hero-cta:hover .ico{transform:rotate(-12deg)}\n\n\/* =========================================================\n   Layout principal (sustituye al .wrap inline)\n   ========================================================= *\/\n.wrap{max-width:1240px;margin:0 auto;padding:56px 24px 96px}\n@media(max-width:768px){.wrap{padding:40px 18px 64px}}\n\n\/* Cabecera vieja: la ocultamos porque ahora vive en el hero *\/\nheader.page{display:none}\n\nnoscript .nojs{\n  background:#FFF7ED;border:1px solid #FED7AA;color:#9A3412;\n  padding:16px 20px;border-radius:var(--radius-sm);margin-bottom:24px;font-size:.9rem;\n}\n\n\/* =========================================================\n   PRODUCT SECTION \u2014 card grande con dos columnas\n   ========================================================= *\/\n.product-section{\n  margin:0 0 40px;\n  background:var(--card);\n  border:1px solid var(--line);\n  border-radius:var(--radius);\n  box-shadow:var(--shadow);\n  overflow:hidden;\n  position:relative;\n}\n.product-section::before{\n  content:\"\";position:absolute;top:0;left:0;\n  width:160px;height:4px;\n  background:linear-gradient(90deg,var(--navy) 0%,var(--orange) 100%);\n}\n.product-grid{display:grid;grid-template-columns:1fr;gap:0}\n@media(min-width:1020px){\n  .product-grid{grid-template-columns:360px 1fr}\n  .product-grid.reverse{grid-template-columns:1fr 360px}\n}\n.product-info{\n  padding:48px 38px;\n  background:linear-gradient(180deg,#FAFBFC 0%, #F0F3F7 100%);\n  border-right:1px solid var(--line);\n  display:flex;flex-direction:column;gap:18px;\n}\n.product-grid.reverse .product-info{\n  border-right:0;border-left:1px solid var(--line);order:2;\n}\n@media(max-width:1019px){\n  .product-info{padding:32px 24px;border-right:0;border-left:0;border-bottom:1px solid var(--line)}\n  .product-grid.reverse .product-info{order:0;border-left:0;border-bottom:1px solid var(--line)}\n}\n\n.product-badge{\n  display:inline-block;\n  color:var(--orange);\n  font-family:var(--font-display);\n  font-weight:700;font-size:.72rem;\n  letter-spacing:.16em;text-transform:uppercase;\n  background:transparent;padding:0;border:0;\n  align-self:flex-start;line-height:1.2;\n}\n.product-badge::before{content:\"\/\/ \"}\n.product-badge.brand{color:var(--navy)}\n\n.product-name{\n  font-family:var(--font-display);\n  font-size:clamp(11.1rem,2.4vw,2.2rem);\n  font-weight:800;color:var(--navy);\n  margin:0;letter-spacing:-.025em;line-height:1.05;\n  text-wrap:balance;\n}\n.product-tagline{\n  font-size:1rem;color:var(--ink-soft);\n  margin:0;line-height:1.7;\n}\n.product-tagline strong{color:var(--ink);font-weight:600}\n\n.product-content{padding:42px 38px;min-width:0}\n@media(max-width:1019px){.product-content{padding:30px 24px}}\n.product-content-header{\n  display:flex;align-items:flex-start;justify-content:space-between;\n  gap:16px;flex-wrap:wrap;margin-bottom:22px;\n}\n.product-content-header h3{\n  margin:0;\n  font-family:var(--font-display);\n  font-size:clamp(1.25rem,1.6vw,1.55rem);\n  font-weight:700;color:var(--navy);\n  letter-spacing:-.02em;line-height:1.2;\n}\n.product-content-header .sub{\n  font-size:1.45rem;color:var(--ink-soft);\n  margin:8px 0 0;line-height:1.55;max-width:62ch;\n}\n\n\/* =========================================================\n   CTA p\u00edldora \u2014 el patr\u00f3n Vinces \"Contacta con nosotros \u2197\"\n   ========================================================= *\/\n.pane-cta,\n.product-cta,\n.dl-btn{\n  display:inline-flex;align-items:center;gap:12px;\n  background:var(--navy);color:#fff;\n  padding:13px 18px 13px 26px;\n  border-radius:999px;\n  text-decoration:none;\n  font-family:var(--font-display);\n  font-weight:700;font-size:.88rem;\n  transition:transform .15s ease, box-shadow .2s ease, background .2s ease;\n  border:0;cursor:pointer;line-height:1;\n  white-space:nowrap;\n}\n.pane-cta::after,\n.product-cta::after{content:none}\n.pane-cta::before,\n.product-cta::before,\n.dl-btn::before{\n  order:2;\n  content:\"\\2197\";\n  width:26px;height:26px;border-radius:50%;\n  background:rgba(255,255,255,.16);\n  display:inline-flex;align-items:center;justify-content:center;\n  font-size:1.25rem;font-weight:500;\n  transition:transform .25s ease;\n}\n.pane-cta:hover,\n.product-cta:hover,\n.dl-btn:hover{\n  background:var(--navy-light);\n  transform:translateY(-2px);\n  box-shadow:0 10px 24px rgba(31,37,71,.18);\n  color:#fff;\n}\n.pane-cta:hover::before,\n.product-cta:hover::before{transform:translate(2px,-2px) rotate(-8deg)}\n\n.pane-cta-row{\n  margin-top:28px;padding:22px 24px;\n  background:var(--bg-alt);\n  border:1px solid var(--line-soft);\n  border-radius:var(--radius-sm);\n  display:flex;flex-wrap:wrap;align-items:center;gap:18px;\n}\n.pane-cta-row .pane-cta-text{\n  flex:1;min-width:240px;\n  font-size:1.45rem;color:var(--ink-soft);\n  margin:0;line-height:1.6;\n}\n.pane-cta-row .pane-cta-text strong{color:var(--ink);font-weight:700}\n.content-cta-row{\n  margin-top:32px;padding:24px 26px;\n  background:linear-gradient(135deg, var(--navy) 0%, var(--navy-deep) 100%);\n  color:#fff;\n  border-radius:var(--radius-sm);\n  display:flex;flex-wrap:wrap;align-items:center;gap:20px;\n}\n.content-cta-row .pane-cta-text{\n  flex:1;min-width:240px;\n  font-size:1.45rem;color:rgba(255,255,255,.78);\n  margin:0;line-height:1.6;\n}\n.content-cta-row .pane-cta-text strong{color:#fff;font-weight:700}\n.content-cta-row .pane-cta{\n  background:#fff;color:var(--navy);\n}\n.content-cta-row .pane-cta::before{background:var(--navy);color:#fff}\n.content-cta-row .pane-cta:hover{background:var(--orange);color:var(--navy)}\n.content-cta-row .pane-cta:hover::before{background:var(--navy);color:#fff}\n\n\/* Updated pill compatible con c\u00f3digo original (queda oculto en hero, pero el JS a\u00fan escribe en \u00e9l) *\/\n.updated{\n  font-size:.8rem;color:var(--ink-soft);\n  background:var(--card);border:1px solid var(--line);\n  padding:8px 16px;border-radius:999px;\n  display:inline-flex;align-items:center;gap:8px;\n}\n.updated .dot{width:8px;height:8px;border-radius:50%;background:var(--good);box-shadow:0 0 0 4px rgba(31,168,134,.15)}\n.updated.err .dot{background:var(--bad);box-shadow:0 0 0 4px rgba(192,57,43,.15)}\n.updated.err{color:var(--bad);border-color:#FECACA}\n\n\/* =========================================================\n   Carrusel de tabs (PolicyAlert)\n   ========================================================= *\/\n.car-tabs{\n  display:flex;gap:6px;margin:-8px 0 28px;\n  padding:6px;background:var(--bg-alt);\n  border:1px solid var(--line-soft);border-radius:999px;\n  flex-wrap:wrap;width:fit-content;max-width:100%;\n}\n.car-tab{\n  background:transparent;border:0;\n  padding:10px 20px;font-weight:600;font-size:1.25rem;\n  color:var(--ink-soft);cursor:pointer;\n  font-family:var(--font-display);\n  border-radius:999px;\n  transition:all .15s ease;\n  line-height:1.2;\n}\n.car-tab:hover{color:var(--navy)}\n.car-tab.active{\n  background:var(--navy);color:#fff;\n  box-shadow:0 2px 8px rgba(31,37,71,.18);\n}\n.car-pane{display:none}\n.car-pane.active{display:block;animation:vc-fade .35s cubic-bezier(.16,1,.3,1)}\n@keyframes vc-fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}\n\n\/* =========================================================\n   Nombramientos (Poder Digital)\n   ========================================================= *\/\n.nomb-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:12px}\n.nomb-list-grid{display:grid;grid-template-columns:1fr;gap:14px}\n@media(min-width:780px){.nomb-list-grid{grid-template-columns:1fr 1fr}}\n.nomb-item{\n  display:flex;align-items:flex-start;gap:16px;\n  padding:22px;background:#fff;\n  border:1px solid var(--line);border-radius:var(--radius-sm);\n  transition:all .18s ease;\n  position:relative;\n}\n.nomb-item::before{\n  content:\"\";position:absolute;left:0;top:22px;bottom:22px;width:3px;\n  background:var(--orange);border-radius:3px;opacity:0;transition:opacity .18s ease;\n}\n.nomb-item:hover{\n  border-color:var(--navy);\n  box-shadow:0 8px 24px rgba(31,37,71,.08);\n  transform:translateY(-2px);\n}\n.nomb-item:hover::before{opacity:1}\n.nomb-item .badge{\n  flex:0 0 auto;width:48px;height:48px;border-radius:50%;\n  background:linear-gradient(135deg, var(--navy) 0%, var(--navy-light) 100%);\n  color:#fff;\n  display:flex;align-items:center;justify-content:center;\n  font-weight:700;font-size:.9rem;\n  font-family:var(--font-display);\n  box-shadow:0 4px 10px rgba(31,37,71,.18);\n}\n.nomb-item .body{flex:1;min-width:0}\n.nomb-item .name{\n  font-family:var(--font-display);\n  font-weight:700;font-size:1rem;\n  margin:0 0 6px;color:var(--navy);line-height:1.25;\n  letter-spacing:-.01em;\n}\n.nomb-item .cargo{font-size:.88rem;color:var(--ink-soft);margin:0;line-height:1.5}\n.nomb-item time{\n  font-size:.72rem;color:var(--muted);\n  display:inline-block;margin-top:10px;\n  text-transform:uppercase;letter-spacing:.06em;font-weight:600;\n}\n.nomb-item a{\n  display:inline-block;margin-top:8px;\n  color:var(--navy);text-decoration:none;\n  font-size:.78rem;font-weight:600;\n}\n.nomb-item a:hover{color:var(--orange)}\n\n\/* =========================================================\n   Leyes \/ stepper (PolicyAlert)\n   ========================================================= *\/\n.ley{\n  padding:24px 26px;margin-bottom:14px;\n  border:1px solid var(--line);border-radius:var(--radius-sm);\n  background:#fff;transition:all .18s ease;\n}\n.ley:last-child{margin-bottom:0}\n.ley:hover{\n  border-color:var(--navy);\n  box-shadow:0 8px 24px rgba(31,37,71,.08);\n  transform:translateY(-2px);\n}\n.ley .ley-title{\n  font-family:var(--font-display);\n  font-weight:700;font-size:1.05rem;\n  color:var(--navy);display:block;margin-bottom:8px;\n  letter-spacing:-.015em;line-height:1.35;\n  text-decoration:none;\n}\n.ley .ley-meta{font-size:1.1rem;color:var(--ink-soft);margin:0 0 18px;line-height:1.5}\n.ley .ley-meta strong{color:var(--navy);font-weight:700}\n.stepper{display:flex;flex-wrap:wrap;align-items:flex-start;width:100%;gap:2px 0}\n.stepper .step{\n  flex:1 1 auto;min-width:60px;text-align:center;position:relative;\n  font-size:.64rem;color:var(--muted);padding:0 4px;\n  text-transform:uppercase;letter-spacing:.04em;font-weight:600;\n}\n.stepper .step .dot{\n  width:12px;height:12px;border-radius:50%;\n  background:var(--line);border:2px solid #fff;\n  margin:0 auto 6px;position:relative;z-index:1;\n  box-shadow:0 0 0 1px var(--line);\n}\n.stepper .step.done .dot{background:var(--good);box-shadow:0 0 0 1px var(--good)}\n.stepper .step.current .dot{\n  background:var(--orange);\n  box-shadow:0 0 0 1px var(--orange), 0 0 0 4px rgba(243,165,58,.25);\n  width:14px;height:14px;\n}\n.stepper .step.done,.stepper .step.current{color:var(--ink)}\n.stepper .step.current{font-weight:700;color:var(--navy)}\n.stepper .step::before{content:\"\";position:absolute;top:5px;left:0;right:50%;height:2px;background:var(--line);z-index:0}\n.stepper .step::after{content:\"\";position:absolute;top:5px;left:50%;right:0;height:2px;background:var(--line);z-index:0}\n.stepper .step.done::before,.stepper .step.done::after{background:var(--good)}\n.stepper .step.current::before{background:var(--good)}\n.stepper .step:first-child::before{display:none}\n.stepper .step:last-child::after{display:none}\n\n\/* =========================================================\n   KPIs (PolicyAlert)\n   ========================================================= *\/\n.kpi-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;margin:8px 0 0}\n@media(min-width:760px){.kpi-grid{grid-template-columns:repeat(4,1fr)}}\n.kpi-card{\n  padding:24px 22px;background:#fff;\n  border:1px solid var(--line);border-radius:var(--radius-sm);\n  display:flex;flex-direction:column;gap:6px;\n  position:relative;overflow:hidden;\n  transition:all .18s ease;\n}\n.kpi-card::before{\n  content:\"\";position:absolute;top:0;left:0;right:0;height:3px;\n  background:var(--navy);\n}\n.kpi-card.accent::before{background:var(--orange)}\n.kpi-card.green::before{background:var(--good)}\n.kpi-card.purple::before{background:#7C3AED}\n.kpi-card:hover{box-shadow:0 12px 28px rgba(31,37,71,.08);transform:translateY(-2px)}\n.kpi-label{\n  font-size:1.1rem;color:var(--muted);\n  text-transform:uppercase;letter-spacing:.08em;font-weight:700;margin:0;\n}\n.kpi-value{\n  font-family:var(--font-display);\n  font-size:2.4rem;font-weight:800;\n  color:var(--navy);line-height:1;margin:6px 0 2px;\n  letter-spacing:-.03em;font-variant-numeric:tabular-nums;\n}\n.kpi-card.accent .kpi-value{color:var(--orange)}\n.kpi-card.green .kpi-value{color:var(--good)}\n.kpi-card.purple .kpi-value{color:#7C3AED}\n.kpi-sub{font-size:.8rem;color:var(--ink-soft);margin:0;line-height:1.4}\n\n\/* =========================================================\n   Temas conversaci\u00f3n (WATS): filtros, leyenda, chart\n   ========================================================= *\/\n.tc-meta{\n  font-size:1.25rem;color:var(--muted);margin:8px 0 0;\n  font-weight:500;\n}\n.tc-filters{\n  display:flex;flex-wrap:wrap;gap:6px;\n  margin:20px 0 24px;\n  padding:0 0 18px;border-bottom:1px solid var(--line);\n}\n.tc-filters button{\n  border:1px solid var(--line);background:#fff;\n  color:var(--ink-soft);\n  padding:8px 16px;border-radius:999px;\n  cursor:pointer;font-size:1.1rem;font-weight:600;\n  transition:all .15s ease;line-height:1.2;\n  font-family:var(--font-display);\n}\n.tc-filters button:hover{border-color:var(--navy);color:var(--navy)}\n.tc-filters button.active{\n  background:var(--navy);color:#fff;border-color:var(--navy);\n  box-shadow:0 2px 8px rgba(31,37,71,.16);\n}\n.tc-filters button[disabled]{opacity:.35;cursor:not-allowed}\n.tc-chart-wrap{position:relative;min-height:380px;margin-bottom:16px}\n.tc-legend{\n  display:flex;flex-wrap:wrap;gap:18px;align-items:center;\n  padding:14px 18px;background:var(--bg-alt);\n  border:1px solid var(--line-soft);\n  border-radius:var(--radius-sm);\n  font-size:.8rem;color:var(--ink-soft);\n}\n.tc-legend .lg{display:inline-flex;align-items:center;gap:8px;font-weight:500}\n.tc-legend .sw{width:12px;height:12px;border-radius:3px;display:inline-block}\n\n\/* =========================================================\n   Temas activos (PolicyAlert)\n   ========================================================= *\/\n.temas-act-wrap{position:relative;height:340px;margin:14px 0 14px}\n.temas-act-summary{\n  display:flex;flex-wrap:wrap;gap:10px;align-items:center;\n  margin-bottom:14px;font-size:.88rem;color:var(--ink-soft);\n}\n.temas-act-summary .pill{\n  background:var(--orange);color:var(--navy);\n  padding:6px 14px;border-radius:999px;\n  font-weight:700;font-size:.78rem;\n  font-family:var(--font-display);letter-spacing:.01em;\n}\n.temas-act-legend{\n  display:flex;flex-wrap:wrap;gap:8px;\n  margin-top:14px;padding-top:18px;border-top:1px solid var(--line);\n}\n.temas-act-legend .ta-tag{\n  display:inline-flex;align-items:center;gap:7px;\n  padding:7px 14px;\n  border:1px solid var(--line);border-radius:999px;\n  background:#fff;cursor:pointer;\n  font-family:var(--font-display);\n  font-size:.78rem;font-weight:600;color:var(--ink);\n  transition:all .14s ease;user-select:none;line-height:1.2;\n}\n.temas-act-legend .ta-tag:hover{border-color:var(--navy)}\n.temas-act-legend .ta-tag .sw{width:10px;height:10px;border-radius:50%;display:inline-block;flex-shrink:0;border:1.5px solid transparent}\n.temas-act-legend .ta-tag.off{opacity:.45;background:var(--bg-alt);text-decoration:line-through;color:var(--muted)}\n.temas-act-legend .ta-tag.off .sw{border-color:var(--muted);background:transparent !important}\n.temas-act-legend .ta-actions{display:inline-flex;gap:8px;margin-left:auto;align-items:center;font-size:.78rem}\n.temas-act-legend .ta-actions a{color:var(--navy);font-weight:700;cursor:pointer;text-decoration:none;font-family:var(--font-display)}\n.temas-act-legend .ta-actions a:hover{color:var(--orange)}\n.temas-act-legend .ta-actions span{color:var(--muted)}\n\n\/* =========================================================\n   FAQ\n   ========================================================= *\/\n.faq-section{\n  margin:0 0 40px;padding:56px 48px;\n  background:var(--card);border:1px solid var(--line);\n  border-radius:var(--radius);box-shadow:var(--shadow);\n}\n@media(max-width:768px){.faq-section{padding:36px 24px}}\n.faq-section > h2{\n  font-family:var(--font-display);\n  font-size:clamp(1.8rem,2.6vw,2.3rem);color:var(--navy);\n  font-weight:800;margin:0 0 14px;letter-spacing:-.025em;line-height:1.1;\n  text-wrap:balance;\n}\n.faq-intro{font-size:1.05rem;color:var(--ink-soft);margin:0 0 36px;line-height:1.6;max-width:62ch}\n.faq-block{margin-bottom:36px;padding-top:32px;border-top:1px solid var(--line);scroll-margin-top:24px}\n.faq-block:first-of-type{border-top:0;padding-top:0}\n.faq-block-title{\n  font-family:var(--font-display);\n  font-size:1.35rem;color:var(--navy);\n  font-weight:800;margin:0 0 22px;letter-spacing:-.015em;\n  display:flex;align-items:center;gap:14px;flex-wrap:wrap;\n}\n.faq-badge{\n  display:inline-block;\n  background:var(--navy);color:#fff;\n  font-family:var(--font-display);\n  font-size:.68rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;\n  padding:5px 12px;border-radius:999px;\n}\n.faq-badge.brand{background:var(--orange);color:var(--navy)}\n.faq-list{display:grid;grid-template-columns:1fr;gap:10px}\n@media(min-width:1100px){.faq-list{grid-template-columns:1fr 1fr;gap:10px 24px}}\n.faq-list details{\n  border:1px solid var(--line);border-radius:var(--radius-sm);\n  background:#fff;transition:all .18s ease;overflow:hidden;\n}\n.faq-list details:hover{border-color:var(--navy-light);box-shadow:0 4px 14px rgba(31,37,71,.06)}\n.faq-list details[open]{border-color:var(--navy);box-shadow:0 8px 24px rgba(31,37,71,.10)}\n.faq-list details summary{\n  padding:16px 22px;cursor:pointer;font-weight:600;\n  color:var(--ink);font-size:1.45rem;list-style:none;line-height:1.45;\n}\n.faq-list details summary::after{\n  content:\"+\";float:right;font-weight:300;color:var(--orange);\n  font-size:1.6rem;line-height:.7;margin-left:8px;transition:transform .2s ease;\n}\n.faq-list details[open] summary::after{content:\"\\2212\";color:var(--navy)}\n.faq-list details p{padding:0 22px 18px;margin:0;font-size:.9rem;color:var(--ink-soft);line-height:1.7}\n.faq-list details p a{color:var(--navy);font-weight:700}\n\n\/* =========================================================\n   SEO block \u2014 texto largo indexable\n   ========================================================= *\/\n.seo-block{\n  margin:0 0 32px;padding:56px 48px;\n  background:var(--card);border:1px solid var(--line);\n  border-radius:var(--radius);box-shadow:var(--shadow);\n}\n@media(max-width:768px){.seo-block{padding:36px 24px}}\n.seo-block h2{\n  font-family:var(--font-display);\n  font-size:clamp(11.1rem,2.4vw,2.1rem);color:var(--navy);\n  font-weight:800;margin:0 0 32px;letter-spacing:-.025em;\n  padding-bottom:18px;border-bottom:3px solid var(--orange);\n  line-height:1.15;display:inline-block;\n}\n.seo-grid{display:grid;grid-template-columns:1fr;gap:40px;margin-top:0}\n@media(min-width:960px){.seo-grid{grid-template-columns:1fr 1fr;gap:48px}}\n.seo-item h3{\n  font-family:var(--font-display);\n  font-size:1.25rem;color:var(--navy);font-weight:800;\n  margin:0 0 14px;line-height:1.25;letter-spacing:-.015em;\n}\n.seo-item h4{\n  font-family:var(--font-display);\n  font-size:.78rem;color:var(--orange);font-weight:700;\n  margin:24px 0 12px;text-transform:uppercase;letter-spacing:.12em;\n}\n.seo-item h4::before{content:\"\/\/ \"}\n.seo-item p{font-size:1rem;color:var(--ink-soft);margin:0 0 14px;line-height:1.75}\n.seo-item p strong{color:var(--ink);font-weight:600}\n.seo-item a{color:var(--navy);font-weight:600;text-decoration:none;border-bottom:1px solid currentColor}\n.seo-item a:hover{color:var(--orange)}\n.seo-table{\n  width:100%;border-collapse:collapse;font-size:.86rem;margin-top:12px;\n  background:#fff;border:1px solid var(--line);border-radius:var(--radius-sm);overflow:hidden;\n}\n.seo-table caption{\n  text-align:left;padding:14px 16px;background:var(--navy);color:#fff;\n  font-family:var(--font-display);font-weight:700;font-size:1.25rem;\n  letter-spacing:-.005em;\n}\n.seo-table th,.seo-table td{padding:12px 16px;text-align:left;border-bottom:1px solid var(--line)}\n.seo-table th{\n  background:var(--bg-alt);color:var(--ink);\n  font-family:var(--font-display);font-weight:700;\n  font-size:.76rem;text-transform:uppercase;letter-spacing:.06em;\n}\n.seo-table tr:last-child td{border-bottom:0}\n.seo-table tr:nth-child(even){background:#FAFBFC}\n.seo-table .muted-cell{color:var(--muted);font-style:italic;text-align:center;padding:20px}\n\n\/* =========================================================\n   Utilidades + estados\n   ========================================================= *\/\n.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n.skeleton{background:linear-gradient(90deg,#F1F5F9 25%,#E2E8F0 50%,#F1F5F9 75%);background-size:200% 100%;animation:sk 1.4s infinite;border-radius:6px;color:transparent}\n@keyframes sk{0%{background-position:200% 0}100%{background-position:-200% 0}}\n.error{\n  background:#FEF2F2;border:1px solid #FECACA;color:#991B1B;\n  padding:14px 18px;border-radius:var(--radius-sm);font-size:.92rem;line-height:1.55;\n}\n.empty{color:var(--muted);font-size:.9rem;font-style:italic}\n\n\/* Di\u00e1logos (snippets) *\/\ndialog.snippets{border:none;border-radius:var(--radius);padding:0;max-width:560px;width:90%;box-shadow:var(--shadow-lg)}\ndialog.snippets::backdrop{background:rgba(22,26,54,.55)}\ndialog.snippets .head{padding:20px 24px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:12px}\ndialog.snippets .head h3{margin:0;font-size:1.05rem;color:var(--navy);font-family:var(--font-display);font-weight:800}\ndialog.snippets .head button{border:0;background:transparent;font-size:1.5rem;cursor:pointer;color:var(--ink-soft)}\ndialog.snippets .body{padding:20px 24px;max-height:50vh;overflow:auto}\ndialog.snippets blockquote{margin:0 0 14px;padding:14px 18px;border-left:3px solid var(--orange);background:var(--bg-alt);border-radius:6px;font-size:.92rem;color:var(--ink-soft)}\n\n\/* Heatmap (por si lo activan) *\/\n.hm-meta{display:flex;flex-wrap:wrap;gap:10px;align-items:center;font-size:.84rem;color:var(--ink-soft);margin-bottom:16px}\n.hm-meta .pill{background:var(--navy);color:#fff;padding:5px 14px;border-radius:999px;font-weight:600;font-size:.74rem;font-family:var(--font-display)}\n.hm-scroll{overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;max-width:100%}\n\n\/* Hemiciclo *\/\n.hemi-wrap{position:relative;width:100%;max-width:580px;margin:0 auto}\n.hemi-wrap svg{width:100%;height:auto;display:block}\n.hemi-totals{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:16px 0 16px}\n.hemi-total{padding:14px 12px;border-radius:var(--radius-sm);background:#fff;border:1px solid var(--line);text-align:center}\n.hemi-total .lbl{font-size:.68rem;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-weight:700}\n.hemi-total .val{font-family:var(--font-display);font-size:1.4rem;font-weight:800;display:block;margin-top:4px;color:var(--navy);letter-spacing:-.02em}\n.hemi-total.yes .val{color:#16A34A}\n.hemi-total.no .val{color:#DC2626}\n.hemi-total.abs .val{color:var(--orange)}\n\n\/* Pregunta del d\u00eda *\/\n.pregunta-card{\n  padding:26px 28px;background:#fff;\n  border:1px solid var(--line);border-radius:var(--radius-sm);\n  border-top:4px solid var(--orange);\n}\n.pregunta-meta{font-size:.72rem;color:var(--muted);margin-bottom:10px;text-transform:uppercase;letter-spacing:.08em;font-weight:700;font-family:var(--font-display)}\n.pregunta-q{\n  font-family:var(--font-display);font-size:1.2rem;font-weight:800;\n  color:var(--navy);margin:0 0 14px;line-height:1.3;letter-spacing:-.015em;\n}\n.pregunta-a{font-size:1.45rem;color:var(--ink);line-height:1.7;border-left:3px solid var(--navy);padding:4px 0 4px 18px;margin-top:6px}\n\n\n\n\/* ==========================================================\n   AJUSTES UX (compact hero \u00b7 loading pill a la derecha \u00b7\n   sin aside repetido) \u2014 aplicado a todos los productos\n   ========================================================== *\/\n.vc-hero{\n  padding:42px 24px 34px !important;\n}\n.vc-hero::before{opacity:.85}\n.vc-hero-inner{\n  gap:18px;\n  align-items:center !important;\n}\n@media(min-width:880px){\n  .vc-hero-inner{\n    grid-template-columns:minmax(0,1fr) auto !important;\n    align-items:center !important;\n    gap:32px;\n  }\n}\n.vc-kicker{\n  margin:0 0 10px !important;\n  font-size:.72rem !important;\n  letter-spacing:.16em !important;\n}\n.vc-hero h1{\n  font-size:clamp(1.65rem,3.2vw,2.4rem) !important;\n  margin:0 0 10px !important;\n  line-height:1.08 !important;\n  letter-spacing:-.02em !important;\n}\n.vc-hero-lead{\n  font-size:clamp(.92rem,1.05vw,1rem) !important;\n  margin:0 !important;\n  max-width:72ch;\n  line-height:1.5 !important;\n}\n\n\/* Columna derecha: pill arriba, CTA debajo *\/\n.vc-hero-right{\n  display:flex;flex-direction:column;align-items:flex-end;gap:12px;\n}\n.vc-hero-cta{\n  padding:11px 14px 11px 22px !important;\n  font-size:.88rem !important;\n  align-self:flex-end !important;\n}\n.vc-hero-cta .ico{width:26px;height:26px;font-size:1.25rem}\n\n\/* WATS no tiene logo propio: cartel \"WATS\" no clicable (en lugar del bot\u00f3n-logo) *\/\n.vc-hero-wordmark{\n  align-self:flex-end;\n  font-family:var(--font-display);\n  font-weight:800;\n  font-size:clamp(2rem,3vw,2.6rem);\n  letter-spacing:-.03em;\n  line-height:1;\n  color:#fff;\n  user-select:none;\n}\n.vc-hero-wordmark::after{\n  content:\"\";\n  display:block;\n  width:42px;height:4px;border-radius:999px;\n  margin-top:10px;\n  background:var(--orange);\n}\n@media(max-width:879px){.vc-hero-wordmark{align-self:flex-start}}\n\n\/* Loading \/ \"Actualizado\u2026\" pill \u2014 sin posici\u00f3n absoluta *\/\n.vc-hero #updated-pill{\n  position:static !important;\n  display:inline-flex;align-items:center;gap:8px;\n  background:rgba(255,255,255,.06) !important;\n  border:1px solid rgba(255,255,255,.16) !important;\n  color:rgba(255,255,255,.82) !important;\n  padding:5px 12px;border-radius:999px;\n  font-size:1.1rem;letter-spacing:.04em;\n  margin:0 !important;\n  max-width:min(80vw,360px);\n  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\n  align-self:flex-end;\n}\n.vc-hero #updated-pill .dot{\n  width:7px;height:7px;border-radius:50%;\n  background:#4ADE80;\n  box-shadow:0 0 0 3px rgba(74,222,128,.16);\n  flex-shrink:0;\n}\n.vc-hero #updated-pill.err{\n  background:rgba(252,165,165,.08) !important;\n  border-color:rgba(252,165,165,.28) !important;\n  color:#FCA5A5 !important;\n}\n.vc-hero #updated-pill.err .dot{\n  background:#FCA5A5;\n  box-shadow:0 0 0 3px rgba(252,165,165,.18);\n}\n@media(max-width:879px){\n  .vc-hero{padding:32px 18px 26px !important;}\n  .vc-hero-right{flex-direction:row;flex-wrap:wrap;align-items:center;gap:10px;align-self:flex-start}\n  .vc-hero #updated-pill{align-self:auto}\n}\n\n\/* Quitar la aside \"product-info\" que repite los textos del hero \u00b7 grid a 1 columna *\/\n.product-grid .product-info,\n.product-grid.reverse .product-info{\n  display:none !important;\n}\n.product-grid,\n.product-grid.reverse{\n  grid-template-columns:1fr !important;\n}\n.product-grid > .product-content{\n  order:1 !important;\n  border:0 !important;\n}\n\n\/* Acercar los gr\u00e1ficos al header *\/\n.wrap{padding-top:32px !important;}\n@media(max-width:768px){.wrap{padding-top:22px !important}}\n\n\/* Asegurar que los gr\u00e1ficos aprovechan todo el ancho ahora disponible *\/\n.temas-act-wrap,\n.tc-chart-wrap{width:100% !important;}\n.temas-act-wrap canvas,\n.tc-chart-wrap canvas{\n  width:100% !important;\n  max-width:100% !important;\n}\n\n\/* ==========================================================\n   WATS \u00b7 Layout dos columnas (CTA izquierda, viz derecha)\n   ========================================================== *\/\n.wats-section{padding:0 !important;overflow:hidden}\n.wats-split{\n  display:grid;\n  grid-template-columns:1fr;\n  gap:0;\n}\n@media(min-width:980px){\n  .wats-split{grid-template-columns:380px minmax(0,1fr)}\n}\n.wats-cta{\n  background:linear-gradient(165deg,#1F2547 0%, #161A36 55%, #2A3158 100%);\n  color:#fff;\n  padding:44px 36px;\n  display:flex;flex-direction:column;gap:22px;\n  position:relative;overflow:hidden;\n}\n.wats-cta::before{\n  content:\"\";position:absolute;inset:0;pointer-events:none;\n  background:\n    radial-gradient(circle at 85% 12%, rgba(243,165,58,.18), transparent 50%),\n    radial-gradient(circle at 10% 95%, rgba(31,168,134,.14), transparent 55%);\n}\n.wats-cta > *{position:relative;z-index:1}\n.wats-cta-eyebrow{\n  color:#F3A53A;\n  font-family:var(--font-display);\n  font-weight:700;font-size:.72rem;\n  letter-spacing:.16em;text-transform:uppercase;\n}\n.wats-cta-title{\n  font-family:var(--font-display);\n  font-size:clamp(1.4rem,2.1vw,11.25rem);\n  font-weight:800;letter-spacing:-.025em;line-height:1.1;\n  margin:0;color:#fff;text-wrap:balance;\n}\n.wats-cta-lead{\n  font-size:1.45rem;line-height:1.6;margin:0;\n  color:rgba(255,255,255,.78);\n}\n.wats-cta-lead strong{color:#fff;font-weight:600}\n.wats-cta-bullets{\n  list-style:none;margin:0;padding:0;\n  display:flex;flex-direction:column;gap:12px;\n  font-size:.88rem;color:rgba(255,255,255,.82);\n  line-height:1.5;\n}\n.wats-cta-bullets li{\n  display:flex;gap:12px;align-items:flex-start;\n  padding:12px 14px;\n  background:rgba(255,255,255,.04);\n  border:1px solid rgba(255,255,255,.08);\n  border-radius:10px;\n}\n.wats-cta-bullets li strong{color:#fff;font-weight:700}\n.wats-cta-dot{\n  flex-shrink:0;width:10px;height:10px;border-radius:50%;\n  margin-top:6px;\n  box-shadow:0 0 0 3px rgba(255,255,255,.08);\n}\n.wats-cta-actions{\n  display:flex;gap:14px;align-items:center;flex-wrap:wrap;\n  margin-top:4px;\n}\n.wats-cta-btn{\n  display:inline-flex;align-items:center;gap:12px;\n  background:#fff;color:#1F2547;\n  padding:12px 14px 12px 22px;\n  border-radius:999px;\n  text-decoration:none;\n  font-family:var(--font-display);\n  font-weight:700;font-size:.88rem;\n  transition:transform .15s ease, box-shadow .2s ease;\n}\n.wats-cta-btn:hover{transform:translateY(-2px);box-shadow:0 10px 24px rgba(0,0,0,.3)}\n.wats-cta-btn .ico{\n  width:26px;height:26px;border-radius:50%;\n  background:#1F2547;color:#fff;\n  display:inline-flex;align-items:center;justify-content:center;\n  font-size:1.25rem;transition:transform .2s ease;\n}\n.wats-cta-btn:hover .ico{transform:rotate(-12deg)}\n.wats-cta-link{\n  color:rgba(255,255,255,.82);text-decoration:none;\n  font-family:var(--font-display);font-weight:600;font-size:.86rem;\n  border-bottom:1px solid rgba(255,255,255,.3);padding-bottom:2px;\n}\n.wats-cta-link:hover{color:#fff;border-color:#fff}\n.wats-cta-stats{\n  display:grid;grid-template-columns:repeat(3,1fr);gap:14px;\n  margin-top:8px;\n  padding-top:22px;\n  border-top:1px solid rgba(255,255,255,.1);\n}\n.wats-stat .num{\n  display:block;font-family:var(--font-display);\n  font-size:1.6rem;font-weight:800;color:#fff;\n  letter-spacing:-.02em;line-height:1;\n}\n.wats-stat .lbl{\n  display:block;margin-top:6px;\n  font-size:.85rem;color:rgba(255,255,255,.6);\n  text-transform:uppercase;letter-spacing:.1em;font-weight:600;\n}\n\n\/* Panel derecho: contenido (filtros + viz) *\/\n.wats-chart-panel{padding:36px 36px 36px !important}\n@media(max-width:760px){.wats-chart-panel{padding:26px 22px !important}}\n\n\/* WATS \u00b7 ocultar hero completo: todo se integra en el panel CTA izquierdo *\/\n.wats-hero-hidden{display:none !important}\n\n\/* Meta resumen dentro del panel CTA \u2014 pills compactos *\/\n.wats-cta-meta{\n  list-style:none;margin:6px 0 0;padding:18px 0 0;\n  border-top:1px solid rgba(255,255,255,.1);\n  display:flex;flex-wrap:wrap;gap:8px;\n}\n.wats-cta-meta li{\n  display:inline-flex;align-items:center;gap:8px;\n  padding:6px 11px;\n  background:rgba(255,255,255,.05);\n  border:1px solid rgba(255,255,255,.1);\n  border-radius:999px;\n  font-size:.74rem;color:rgba(255,255,255,.78);\n  font-weight:600;letter-spacing:.01em;\n  font-family:var(--font-display);\n}\n.wats-cta-meta li b{\n  color:#fff;font-weight:800;\n  font-variant-numeric:tabular-nums;\n}\n.wats-cta-meta li svg{\n  width:13px;height:13px;flex-shrink:0;\n  color:var(--orange);opacity:.95;\n}\n\n\/* Eliminar el aside product-info hu\u00e9rfano que sigue dentro de .wats-split *\/\n.wats-split .product-info{display:none !important}\n\n\/* Pill \"Actualizado\u2026\" dentro del panel CTA \u2014 estilo oscuro consistente *\/\n.wats-cta-pill{\n  display:inline-flex;align-items:center;gap:8px;\n  background:rgba(255,255,255,.06);\n  border:1px solid rgba(255,255,255,.16);\n  color:rgba(255,255,255,.82);\n  padding:6px 13px;border-radius:999px;\n  font-size:1.1rem;letter-spacing:.04em;\n  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;\n  max-width:280px;\n}\n.wats-cta-pill .dot{\n  width:7px;height:7px;border-radius:50%;\n  background:#4ADE80;flex-shrink:0;\n  box-shadow:0 0 0 3px rgba(74,222,128,.16);\n}\n.wats-cta-pill.err{\n  background:rgba(252,165,165,.08);\n  border-color:rgba(252,165,165,.28);\n  color:#FCA5A5;\n}\n.wats-cta-pill.err .dot{background:#FCA5A5;box-shadow:0 0 0 3px rgba(252,165,165,.18)}\n\n\/* Quitar header repetitivo del panel derecho *\/\n.wats-chart-panel .product-content-header{display:none !important}\n.wats-chart-panel .tc-filters{margin-top:0 !important}\n\n\/* Lista de temas (sustituye al canvas) *\/\n.tc-chart-wrap{\n  position:relative;\n  height:auto !important;\n  min-height:0 !important;\n  max-height:560px;\n  overflow-y:auto;overflow-x:hidden;\n  padding:4px 6px 4px 0;\n  margin:0 0 14px;\n  scrollbar-width:thin;\n  scrollbar-color:#cfd4df transparent;\n}\n.tc-chart-wrap::-webkit-scrollbar{width:8px}\n.tc-chart-wrap::-webkit-scrollbar-thumb{background:#cfd4df;border-radius:8px}\n.tc-chart-wrap canvas{display:none !important}\n.tc-topics-list{display:flex;flex-direction:column;gap:8px}\n.tc-topic{\n  display:grid;\n  grid-template-columns:auto minmax(0,1fr) auto;\n  align-items:center;gap:14px;\n  padding:10px 14px;\n  background:#fff;\n  border:1px solid var(--line);\n  border-left:4px solid var(--c, #6B7280);\n  border-radius:8px;\n  transition:transform .15s ease, box-shadow .2s ease, border-color .15s;\n  cursor:default;\n}\n.tc-topic:hover{\n  transform:translateX(2px);\n  box-shadow:0 6px 18px rgba(31,37,71,.08);\n  border-color:var(--c, #6B7280);\n}\n.tc-topic .tc-rank{\n  font-family:var(--font-display);font-variant-numeric:tabular-nums;\n  font-size:.78rem;font-weight:700;\n  color:var(--muted);\n  width:24px;text-align:center;\n}\n.tc-topic .tc-body{min-width:0;display:flex;flex-direction:column;gap:5px}\n.tc-topic .tc-topic-name{\n  font-weight:600;color:var(--ink);\n  font-size:.92rem;line-height:1.35;\n  text-overflow:ellipsis;overflow:hidden;\n  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;\n}\n.tc-topic .tc-bar{\n  position:relative;height:6px;\n  background:rgba(0,0,0,.05);border-radius:999px;overflow:hidden;\n  margin-top:2px;\n}\n.tc-topic .tc-bar .tc-fill{\n  display:block;height:100%;border-radius:999px;\n  background:var(--c, #6B7280);\n  transition:width .8s cubic-bezier(.2,.7,.2,1);\n}\n.tc-topic .tc-meta-line{\n  display:flex;gap:10px;align-items:center;flex-wrap:wrap;\n  font-size:1.1rem;color:var(--muted);\n  text-transform:uppercase;letter-spacing:.06em;font-weight:600;\n}\n.tc-topic .tc-meta-line .tc-ambito{\n  display:inline-flex;align-items:center;gap:5px;\n  color:var(--ink-soft);\n}\n.tc-topic .tc-meta-line .tc-ambito::before{\n  content:\"\";width:5px;height:5px;border-radius:50%;background:currentColor;opacity:.5;\n}\n.tc-topic .tc-sentiment{\n  font-size:.85rem;font-weight:800;letter-spacing:.08em;\n  text-transform:uppercase;\n  padding:3px 9px;border-radius:999px;\n  background:var(--c, #6B7280);color:#fff;\n  white-space:nowrap;\n}\n.tc-topic .tc-freq{\n  font-family:var(--font-display);font-variant-numeric:tabular-nums;\n  font-size:1.25rem;font-weight:800;\n  color:var(--c, #1F2547);\n  line-height:1;\n  display:flex;flex-direction:column;align-items:flex-end;\n  min-width:42px;\n}\n.tc-topic .tc-freq small{\n  font-size:.55rem;color:var(--muted);\n  text-transform:uppercase;letter-spacing:.1em;font-weight:600;\n  margin-top:3px;line-height:1;\n}\n@media(max-width:560px){\n  .tc-topic{grid-template-columns:auto 1fr auto;gap:10px;padding:10px 12px}\n  .tc-topic .tc-rank{display:none}\n  .tc-topic .tc-topic-name{font-size:.88rem}\n}\n\n\/* ==========================================================\n   WATS \u00b7 Treemap de tendencias (temas de conversaci\u00f3n) \u2014 Vinces\n   Namespaced bajo .wt-tree\n   ========================================================== *\/\n.wt-tree{--blue:var(--navy);--fd:var(--font-display);--fb:var(--font-body);--fm:ui-monospace,Menlo,monospace}\n.wt-tree .wt-hint{font-size:.92rem;color:var(--ink-soft);margin:0 0 18px;max-width:72ch;line-height:1.55}\n.wt-tree .wt-hint strong{color:var(--ink);font-weight:700}\n.wt-tree .filterbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 4px}\n.wt-tree .flabel{font-family:var(--fm);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin-right:2px;min-width:88px;display:inline-block}\n.wt-tree .schip{display:inline-flex;align-items:center;gap:8px;font-family:var(--fb);font-weight:600;font-size:13px;border:1.5px solid var(--line);background:#fff;border-radius:999px;padding:7px 15px;cursor:pointer;transition:all .14s;color:var(--ink);white-space:nowrap}\n.wt-tree .filterbar .period-pill{display:none}\n.product-content-header .period-tag{display:inline-flex;align-items:center;gap:7px;align-self:flex-start;margin-top:5px;font-family:var(--fb);font-weight:500;font-size:13px;color:var(--muted);white-space:nowrap}\n.product-content-header .period-tag svg{width:15px;height:15px;color:var(--muted);flex:none}\n.product-content-header .period-tag b{color:var(--ink);font-weight:700}\n@media(max-width:620px){.product-content-header .period-tag{align-self:flex-start;margin-top:4px}}\n.wt-tree .schip .cdot{width:11px;height:11px;border-radius:50%}\n.wt-tree .metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:26px 0 0}\n@media(max-width:980px){.wt-tree .metrics{grid-template-columns:repeat(2,1fr)}}\n@media(max-width:520px){.wt-tree .metrics{grid-template-columns:repeat(1,1fr)}}\n.wt-tree .metric{background:var(--bg-alt);border-radius:14px;padding:14px 16px;text-align:center}\n.wt-tree .metric .k{font-family:var(--fm);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:0 0 8px}\n.wt-tree .metric .v{font-family:var(--fd);font-weight:800;font-size:24px;line-height:1.05;color:var(--blue)}\n.wt-tree .metric .v small{font-family:var(--fb);font-weight:500;font-size:12px;color:var(--ink-soft);display:block;margin-top:6px;letter-spacing:0;text-transform:none;line-height:1.35}\n.wt-tree .metric .split{margin-top:4px}\n.wt-tree .metric .split-bar{display:flex;height:11px;border-radius:999px;overflow:hidden;background:var(--line)}\n.wt-tree .metric .split-bar span{display:block;height:100%;transition:filter .15s}\n.wt-tree .metric .split-bar .seg{cursor:default}\n.wt-tree .metric .split-bar .seg.hot{filter:brightness(1.16)}\n.wt-tree .metric .split-legend span{transition:color .15s,transform .15s;cursor:default}\n.wt-tree .metric .split-legend span b{display:none;font-weight:700;color:var(--ink);margin-left:3px;transition:color .15s}\n.wt-tree .metric .split-legend span.hot b{display:inline-block;color:var(--ink);font-weight:600;font-size:12px}\n.wt-tree .metric .split-legend span.hot i{transform:scale(1.3)}\n.wt-tree .metric .split-legend{display:flex;flex-wrap:wrap;justify-content:center;gap:5px 14px;margin-top:9px;font-family:var(--fb);font-weight:500;font-size:12px;color:var(--ink-soft);letter-spacing:0;text-transform:none;line-height:1.2}\n.wt-tree .metric .split-legend i{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:5px;vertical-align:middle}\n.wt-tree .top-ents{margin:18px 0 0;background:var(--bg-alt);border-radius:14px;padding:14px 16px}\n.wt-tree .top-ents .k{font-family:var(--fm);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:0 0 10px}\n.wt-tree .top-ents .k .mock{text-transform:none;letter-spacing:0;color:var(--ink-soft);font-family:var(--fb);font-weight:500}\n.wt-tree .top-ents ol{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:10px}\n.wt-tree .top-ents li{display:flex;align-items:center;gap:9px;background:#fff;border:1px solid var(--line);border-radius:999px;padding:6px 14px 6px 8px}\n.wt-tree .top-ents .ent{display:flex;flex-direction:column;line-height:1.15;min-width:0;max-width:210px}\n.wt-tree .top-ents .nm{font-family:var(--fb);font-weight:600;font-size:13px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px}\n.wt-tree .top-ents .role{font-family:var(--fb);font-weight:500;font-size:11px;color:var(--ink-soft);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px}\n.wt-tree .top-ents .rk{width:20px;height:20px;border-radius:50%;background:var(--blue);color:#fff;font-family:var(--fd);font-weight:800;font-size:11px;display:grid;place-items:center;flex:none}\n.wt-tree .top-ents .nm{font-family:var(--fb);font-weight:600;font-size:13px;color:var(--ink)}\n.wt-tree .top-ents .ct{font-family:var(--fm);font-size:12px;color:var(--ink-soft)}\n.wt-tree .top-ents li.ent-row{cursor:pointer;transition:border-color .14s,box-shadow .14s,transform .14s}\n.wt-tree .top-ents li.ent-row:hover{border-color:var(--blue);box-shadow:0 4px 14px rgba(31,37,71,.1);transform:translateY(-1px)}\n.wt-tree .top-ents li.ent-row:focus-visible{outline:2px solid var(--blue);outline-offset:2px}\n.wt-tree .top-ents .nm-orig-removed{}\n.wt-tree .metric .crit{display:flex;align-items:center;justify-content:center;gap:9px}\n\/* CTA banner siempre visible bajo el gr\u00e1fico \u2014 abre el modal de contacto *\/\n.wt-tree .wt-cta-bar{display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;margin:22px 0 0;padding:20px 24px;border-radius:16px;background:linear-gradient(135deg,#1F2547 0%,#161A36 60%,#2A3158 100%);position:relative;overflow:hidden}\n.wt-tree .wt-cta-bar::before{content:\"\";position:absolute;inset:0;pointer-events:none;background:radial-gradient(circle at 90% 10%,rgba(243,165,58,.18),transparent 55%)}\n.wt-tree .wt-cta-txt{position:relative;z-index:1;color:rgba(255,255,255,.82);font-family:var(--fb);font-size:1.45rem;line-height:1.5;max-width:62ch}\n.wt-tree .wt-cta-txt strong{color:#fff;font-weight:700}\n.wt-tree .wt-cta-btn{position:relative;z-index:1;flex-shrink:0;display:inline-flex;align-items:center;gap:10px;border:0;cursor:pointer;background:var(--orange);color:var(--navy);font-family:var(--fd);font-weight:700;font-size:.92rem;padding:12px 24px;border-radius:999px;transition:transform .15s ease,box-shadow .2s ease,background .2s ease;box-shadow:0 6px 18px rgba(243,165,58,.28)}\n.wt-tree .wt-cta-btn:hover{transform:translateY(-1px);background:#f7b35a;box-shadow:0 10px 24px rgba(243,165,58,.4)}\n.wt-tree .wt-cta-btn .arr{transition:transform .18s ease}\n.wt-tree .wt-cta-btn:hover .arr{transform:translateX(3px)}\n@media(max-width:620px){.wt-tree .wt-cta-bar{flex-direction:column;align-items:flex-start}.wt-tree .wt-cta-btn{width:100%;justify-content:center}}\n.wt-tree .metric .climate{display:flex;flex-direction:column;gap:11px;margin-top:2px}\n.wt-tree .metric .climate-one{display:flex;flex-direction:column;align-items:center;gap:5px;margin-top:4px}\n.wt-tree .metric .climate-one .cl-top{display:flex;align-items:center;justify-content:center;gap:8px}\n.wt-tree .metric .climate-one .cl-ic{display:inline-flex;width:22px;height:22px;color:var(--navy)}\n.wt-tree .metric .climate-one .cl-ic svg{width:22px;height:22px;display:block}\n.wt-tree .metric .climate-one .cl-nm{font-family:var(--fd);font-weight:700;font-size:14px;color:var(--ink);line-height:1.15}\n.wt-tree .metric .climate-one .cl-pct{font-family:var(--fd);font-weight:600;font-size:15px;line-height:1}\n.wt-tree .metric .climate-one .cl-pct.pos{color:#3F875C}\n.wt-tree .metric .climate-one .cl-pct.neg{color:#C2564A}\n.wt-tree .metric .crit-ic{display:inline-flex;width:26px;height:26px;flex:none}\n.wt-tree .metric .crit-ic svg{width:26px;height:26px;display:block}\n.wt-modal{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;padding:20px;background:rgba(22,26,54,.55);opacity:0;visibility:hidden;transition:opacity .18s}\n.wt-modal.open{opacity:1;visibility:visible}\n.wt-modal .box{background:#fff;border-radius:18px;max-width:380px;width:100%;padding:28px;box-shadow:0 24px 60px rgba(31,37,71,.32);text-align:center;transform:translateY(10px);transition:transform .18s;font-family:var(--font-body)}\n.wt-modal.open .box{transform:none}\n.wt-modal h4{font-family:var(--font-display);font-weight:800;font-size:1.2rem;color:var(--navy);margin:0 0 8px}\n.wt-modal p{color:var(--ink-soft);font-size:1.45rem;line-height:1.55;margin:0 0 20px}\n.wt-modal .acts{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}\n.wt-modal a.cta{background:var(--navy);color:#fff;text-decoration:none;font-family:var(--font-display);font-weight:700;font-size:.9rem;padding:11px 20px;border-radius:10px}\n.wt-modal button.x{background:var(--bg-alt);border:1px solid var(--line);color:var(--ink);font-family:var(--font-display);font-weight:700;font-size:.9rem;padding:11px 18px;border-radius:10px;cursor:pointer}\n.wt-tree .tchips{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:20px 0 0}\n.wt-tree .tchip{font-family:var(--fb);font-weight:600;font-size:13px;border-radius:999px;padding:7px 16px;cursor:pointer;border:1.5px solid;background:#fff;transition:all .14s;white-space:nowrap}\n.wt-tree .tchip.on{box-shadow:0 0 0 3px rgba(0,0,0,.06)}\n.wt-tree .scope{font-family:var(--fm);font-size:12px;color:var(--muted);margin:22px 0 0}\n.wt-tree .intro{font-size:15px;color:var(--ink-soft);margin:8px 0 0;max-width:74ch}\n.wt-tree .treebox{position:relative}\n.wt-tree #canvas{position:relative;width:100%;height:520px;margin-top:14px}\n.wt-tree .box{position:absolute;border-radius:10px;overflow:hidden;padding:12px 14px;display:flex;flex-direction:column;cursor:pointer;transition:transform .14s cubic-bezier(.2,.8,.2,1),filter .14s ease}\n.wt-tree .box:hover{filter:brightness(.95);transform:translateY(-2px)}\n.wt-tree .box .lbl{font-family:var(--fd);font-weight:700;line-height:1.13;letter-spacing:-.01em}\n.wt-tree .box .num{font-family:var(--fm);font-size:11.5px;margin-top:6px;opacity:.9}\n.wt-tree .wt-empty{color:var(--muted);font-family:var(--fm);padding:32px 0;text-align:center}\n.wt-tree .pos .phead{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:6px 0 0}\n.wt-tree .pos .phead .back{margin-top:0;flex:none}\n.wt-tree .pos .ptitle{font-family:var(--fd);font-weight:800;font-size:clamp(20px,3vw,28px);letter-spacing:-.015em;color:var(--ink);margin:0;line-height:1.2}\n.wt-tree .pos .pcrumb{font-family:var(--fm);font-size:12px;color:var(--muted);margin:10px 0 0}\n.wt-tree .ptags{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:12px}\n.wt-tree .ptag{display:inline-flex;align-items:center;gap:7px;font-family:var(--fm);font-size:12px;padding:5px 13px;border-radius:999px}\n.wt-tree .sentdot{width:10px;height:10px;border-radius:50%}\n.wt-tree .psummary{font-size:16px;color:var(--ink);max-width:74ch;margin:16px 0 0;line-height:1.65}\n.wt-tree .pmeta{font-family:var(--fm);font-size:13px;color:var(--ink-soft);margin:14px 0 2px}\n.wt-tree .pgroup{border:1px solid var(--line);border-radius:14px;padding:18px 20px;margin-top:14px}\n.wt-tree .pgroup h3{font-family:var(--fd);font-size:15px;margin:0;display:flex;align-items:center;gap:9px}\n.wt-tree .pgroup h3 .gd{width:12px;height:12px;border-radius:50%}\n.wt-tree .pstance{font-size:15px;color:var(--ink);margin:8px 0 14px;line-height:1.6;max-width:74ch}\n.wt-tree .orgs{display:flex;gap:8px;flex-wrap:wrap}\n.wt-tree .org{font-family:var(--fm);font-size:12px;color:var(--ink-soft);background:var(--bg-alt);border:1px solid var(--line);padding:5px 11px;border-radius:8px}\n.wt-tree .tops{display:flex;flex-direction:column;gap:10px;margin-top:12px;max-width:74ch}\n.wt-tree .pos .pos-grid{display:grid;grid-template-columns:1fr 1fr;gap:26px;align-items:start;margin-top:22px}\n@media(max-width:880px){.wt-tree .pos .pos-grid{grid-template-columns:1fr;gap:22px}}\n.wt-tree .pos .pdesc{display:grid;grid-template-columns:1.5fr 1fr;background:var(--bg-alt);border:1px solid var(--line);border-radius:14px;padding:0;margin:18px 0 0;overflow:hidden}\n@media(max-width:760px){.wt-tree .pos .pdesc{grid-template-columns:1fr}}\n.wt-tree .pos .pdesc .pdesc-col{padding:18px 20px}\n.wt-tree .pos .pdesc .pdesc-col + .pdesc-col{border-left:1px solid var(--line)}\n@media(max-width:760px){.wt-tree .pos .pdesc .pdesc-col + .pdesc-col{border-left:0;border-top:1px solid var(--line)}}\n.wt-tree .pos .pdesc .pdesc-h{font-family:var(--fd);font-weight:800;font-size:12px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin:0 0 8px}\n.wt-tree .pos .pdesc .psummary{margin:0;max-width:none}\n.wt-tree .pos .pdesc .pconcepts{margin:0;border-top:0;padding-top:18px}\n.wt-tree .pos .pdesc .pconcepts-h{display:block;font-family:var(--fm);font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0 0 9px}\n.wt-tree .pos .pdesc .pconcepts-row{display:flex;flex-wrap:wrap;gap:8px}\n.wt-tree .pos .pdesc .pconcept{font-family:var(--fb);font-weight:600;font-size:12.5px;color:var(--navy);background:#fff;border:1px solid var(--line);border-radius:999px;padding:5px 13px;cursor:pointer;transition:border-color .14s,background .14s}\n.wt-tree .pos .pdesc .pconcept:hover{border-color:var(--navy);background:var(--navy-soft)}\n.wt-tree .pos .col-h{font-family:var(--fd);font-weight:800;font-size:12px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin:0 0 14px}\n.wt-tree .pos-left .pgroup{border:1px solid var(--line);border-left:4px solid var(--gc,var(--navy));background:#fff;border-radius:12px;padding:16px 18px;margin:0 0 14px;box-shadow:0 1px 2px rgba(31,37,71,.04)}\n.wt-tree .pos-left .pgroup:last-child{margin-bottom:0}\n.wt-tree .pos-right .tops{max-width:none;margin-top:0}\n.wt-tree .pos-right .top{min-height:120px;height:auto;overflow:hidden;background:var(--bg-alt);border:1px solid var(--line);border-radius:12px;padding:12px 15px;cursor:default}\n.wt-tree .pos-right .top .top-text{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin-top:6px}\n.wt-tree .pos-right .ver-mas{margin-top:14px;width:100%;background:#fff;border:1.5px solid var(--line);border-radius:10px;padding:11px;font-family:var(--fd);font-weight:700;font-size:.9rem;color:var(--navy);cursor:pointer;transition:border-color .14s,background .14s}\n.wt-tree .pos-right .ver-mas:hover{border-color:var(--navy);background:var(--bg-alt)}\n.wt-tree .top-head .top-dot{display:inline-block;width:10px;height:10px;border-radius:50%;flex:none}\n.wt-tree .top{border:1px solid var(--line);border-radius:12px;padding:12px 15px;background:var(--bg-alt)}\n.wt-tree .top-head{display:flex;align-items:center;gap:9px;flex-wrap:wrap;font-size:13.5px}\n.wt-tree .top-head>strong{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}\n.wt-tree .top-head strong{font-weight:600}\n.wt-tree .top-net{font-family:var(--fm);font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;display:inline-flex;align-items:center}\n.wt-tree .top-net svg{width:15px;height:15px;display:block}\n.wt-tree .top-role{font-family:var(--fb);font-size:11.5px;font-weight:600;color:var(--ink-soft);background:var(--bg-alt);border:1px solid var(--line);border-radius:999px;padding:1px 9px;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}\n.wt-tree .top-impact{font-family:var(--fm);font-size:12px;color:var(--blue);font-weight:700}\n.wt-tree .top-link{margin-left:auto;font-weight:600;font-size:12.5px;color:var(--blue);text-decoration:none;border:1px solid var(--line);border-radius:7px;padding:3px 9px}\n.wt-tree .top-text{font-size:14px;color:var(--ink);margin-top:8px;line-height:1.5}\n.wt-tree .back{display:inline-flex;align-items:center;gap:8px;margin-top:14px;font-family:var(--fb);font-weight:600;font-size:14px;color:var(--blue);background:none;border:1.5px solid var(--blue);border-radius:10px;padding:8px 16px;cursor:pointer}\n.wt-tree .back:hover{background:var(--blue);color:#fff}\n@media(max-width:720px){.wt-tree #canvas{height:560px}}\n\n\/* ==========================================================\n   HERO IMPACTO \u2014 titular grande, LIVE pulsante, malla + glow,\n   chips de alcance. Sobrescribe los ajustes \"compact\".\n   ========================================================== *\/\n.vc-hero{\n  padding:46px 24px 40px !important;\n  background:\n    radial-gradient(120% 140% at 85% -10%, var(--navy-light) 0%, var(--navy) 42%, var(--navy-deep) 100%) !important;\n}\n\/* Malla de puntos sutil sobre el navy *\/\n.vc-hero::before{\n  background:\n    radial-gradient(circle at 88% 12%, rgba(243,165,58,.16), transparent 42%),\n    radial-gradient(circle at 4% 100%, rgba(31,168,134,.10), transparent 52%),\n    radial-gradient(rgba(255,255,255,.05) 1px, transparent 1px) !important;\n  background-size:auto, auto, 22px 22px !important;\n  opacity:1 !important;\n}\n.vc-hero::after{\n  height:2px !important;\n  background:linear-gradient(90deg, transparent, var(--orange), transparent) !important;\n  opacity:.6;\n}\n.vc-hero-inner{\n  align-items:center !important;\n  gap:28px !important;\n}\n@media(min-width:880px){\n  .vc-hero-inner{\n    grid-template-columns:minmax(0,1fr) auto !important;\n    align-items:center !important;\n    gap:56px !important;\n  }\n}\n\n\/* Kicker con punto LIVE pulsante *\/\n.vc-kicker{\n  display:inline-flex !important;align-items:center;gap:9px;\n  margin:0 0 13px !important;\n  font-size:.72rem !important;\n  letter-spacing:.18em !important;\n  padding:6px 14px 6px 11px;\n  border:1px solid rgba(243,165,58,.32);\n  border-radius:999px;\n  background:rgba(243,165,58,.08);\n  color:var(--orange);\n}\n.vc-kicker::before{content:none !important}\n.vc-live-dot{\n  position:relative;width:8px;height:8px;border-radius:50%;\n  background:#4ADE80;flex-shrink:0;\n}\n.vc-live-dot::after{\n  content:\"\";position:absolute;inset:0;border-radius:50%;\n  background:#4ADE80;\n}\n@media(prefers-reduced-motion:no-preference){\n  .vc-live-dot::after{animation:vcLivePulse 1.8s ease-out infinite}\n}\n@keyframes vcLivePulse{\n  0%{transform:scale(1);opacity:.7}\n  70%{transform:scale(3);opacity:0}\n  100%{transform:scale(3);opacity:0}\n}\n\n\/* Titular grande con segunda l\u00ednea destacada *\/\n.vc-hero h1{\n  font-size:clamp(11.1rem,3.3vw,21.1rem) !important;\n  font-weight:800 !important;\n  line-height:1 !important;\n  letter-spacing:-.035em !important;\n  margin:0 0 14px !important;\n  white-space:nowrap;\n}\n.vc-hero h1 .hl{\n  position:relative;\n  color:var(--orange);\n  white-space:nowrap;\n}\n.vc-hero h1 .hl::after{\n  content:\"\";position:absolute;left:0;right:0;bottom:.04em;height:.09em;\n  background:linear-gradient(90deg,var(--orange),rgba(243,165,58,.15));\n  border-radius:999px;\n}\n\n.vc-hero-lead{\n  font-size:clamp(.9rem,1vw,1.02rem) !important;\n  color:rgba(255,255,255,.82) !important;\n  max-width:60ch !important;\n  line-height:1.58 !important;\n  margin:0 0 20px !important;\n}\n\n\/* Fila de chips de alcance *\/\n.vc-hero-chips{\n  display:flex;flex-wrap:wrap;gap:10px;margin:0;padding:0;list-style:none;\n}\n.vc-hero-chips li{\n  display:inline-flex;align-items:center;gap:8px;\n  font-family:var(--font-display);\n  font-size:1.1rem;font-weight:600;\n  color:rgba(255,255,255,.9);\n  background:rgba(255,255,255,.06);\n  border:1px solid rgba(255,255,255,.14);\n  padding:8px 14px;border-radius:999px;\n  backdrop-filter:blur(6px);\n  transition:transform .15s ease, border-color .15s ease, background .15s ease;\n}\n.vc-hero-chips li:hover{\n  transform:translateY(-2px);\n  border-color:rgba(243,165,58,.4);\n  background:rgba(243,165,58,.1);\n}\n.vc-hero-chips .chip-ico{\n  color:var(--orange);display:inline-flex;flex-shrink:0;\n}\n@media(prefers-reduced-motion:reduce){\n  .vc-hero-chips li:hover{transform:none}\n}\n\n\/* CTA m\u00e1s presente *\/\n.vc-hero-cta{\n  padding:14px 18px 14px 26px !important;\n  font-size:1.45rem !important;\n  box-shadow:0 8px 24px rgba(0,0,0,.22);\n}\n.vc-hero-cta .ico{width:30px;height:30px;font-size:1.45rem}\n\n@media(max-width:879px){\n  .vc-hero{padding:44px 18px 36px !important;}\n  .vc-hero h1{font-size:clamp(11.1rem,7vw,2.6rem) !important;white-space:normal}\n  .vc-hero h1 .hl{white-space:normal}\n}\n\n\/* ==========================================================\n   RUEDA VERTICAL (estilo cr\u00e9ditos) \u2014 rail derecho del hero\n   ========================================================== *\/\n\/* Rail: pill arriba, tarjeta de la rueda en medio, CTA abajo *\/\n.vc-hero-right{\n  gap:18px !important;\n  align-self:center !important;\n}\n\/* Tarjeta que enmarca la rueda *\/\n.vc-hero-rail-card{\n  width:286px;\n  background:rgba(255,255,255,.045);\n  border:1px solid rgba(255,255,255,.12);\n  border-radius:16px;\n  padding:16px 16px 8px;\n  backdrop-filter:blur(6px);\n}\n.vc-wheel-label{\n  display:block;\n  font-family:var(--font-display);\n  font-size:.85rem;font-weight:700;\n  letter-spacing:.18em;text-transform:uppercase;\n  color:var(--orange);\n  margin:0 0 12px 2px;\n}\n.vc-hero-wheel{\n  position:relative;\n  height:184px;\n  overflow:hidden;\n  -webkit-mask-image:linear-gradient(180deg,transparent 0,#000 20%,#000 80%,transparent 100%);\n  mask-image:linear-gradient(180deg,transparent 0,#000 18%,#000 82%,transparent 100%);\n}\n.vc-hero-wheel-track{\n  display:flex;flex-direction:column;\n  will-change:transform;\n}\n@media(prefers-reduced-motion:no-preference){\n  .vc-hero-wheel-track{animation:vcWheelScroll 16s linear infinite}\n}\n.vc-hero-wheel:hover .vc-hero-wheel-track{animation-play-state:paused}\n@keyframes vcWheelScroll{\n  from{transform:translateY(0)}\n  to{transform:translateY(-50%)}\n}\n.vc-wheel-chip{\n  display:flex;align-items:center;gap:10px;\n  margin-bottom:10px;\n  font-family:var(--font-display);\n  font-size:1.1rem;font-weight:600;line-height:1.25;\n  color:rgba(255,255,255,.92);\n  background:rgba(255,255,255,.06);\n  border:1px solid rgba(255,255,255,.14);\n  padding:10px 14px;border-radius:12px;\n  backdrop-filter:blur(6px);\n}\n.vc-wheel-chip .chip-ico{\n  color:var(--orange);display:inline-flex;flex-shrink:0;\n}\n\/* Acciones bajo el texto: bot\u00f3n-logo + badge \"Actualizado\" *\/\n.vc-hero-actions{\n  display:flex;align-items:center;flex-wrap:wrap;\n  gap:16px;margin-top:22px;\n}\n.vc-hero-actions .vc-hero-cta{align-self:auto !important}\n.vc-hero-actions #updated-pill{align-self:auto !important}\n.vc-hero .period-pill{\n  display:inline-flex;align-items:center;gap:9px;align-self:auto;\n  font-family:var(--font-display);font-weight:700;font-size:.9rem;\n  color:#fff;background:rgba(243,165,58,.14);\n  border:1px solid rgba(243,165,58,.55);border-radius:999px;\n  padding:9px 16px;line-height:1;\n}\n.vc-hero .period-pill svg{width:17px;height:17px;color:var(--orange);flex:none}\n.vc-hero .period-pill b{color:var(--orange);font-weight:800}\n\n\/* Bot\u00f3n = logotipo completo de PolicyAlert (sin texto) *\/\n.vc-hero-cta{\n  padding:10px 18px !important;\n  gap:10px !important;\n}\n.vc-cta-logo{display:inline-flex;align-items:center;flex-shrink:0}\n.vc-cta-logo svg{height:30px;width:auto;display:block}\n\/* Icono \"abrir en nueva ventana\": badge circular navy \u2192 se\u00f1ala que es un enlace *\/\n.vc-cta-ext{\n  width:26px;height:26px;border-radius:50%;flex-shrink:0;\n  background:var(--navy);color:#fff;\n  display:inline-flex;align-items:center;justify-content:center;\n  transition:transform .15s ease, background .2s ease;\n}\n.vc-cta-ext svg{width:14px;height:14px;display:block}\n.vc-hero-cta:hover .vc-cta-ext{background:var(--navy-light);transform:translate(1px,-1px)}\n\n@media(max-width:879px){\n  .vc-hero-rail-card{width:100%}\n  .vc-hero-wheel{height:148px}\n  .vc-cta-logo svg{height:30px}\n}\n\n\/* Logo de producto (imagotipo) en el CTA *\/\n.vc-cta-logo svg, .vc-cta-logo img{height:40px !important;width:auto;display:block}\n\n<\/style>\n\n<style id=\"rubrika-type\">\n\/* === Sistema tipogr\u00e1fico Rubrika + hero padding (jun 2026) ===\n   T\u00edtulos\/Subt\u00edtulos: Libre Franklin \u00b7 Textos\/Botones: Lato *\/\n.vc-hero{ padding:150px 24px 100px !important; }\n@media(max-width:879px){ .vc-hero{ padding:110px 18px 64px !important; } }\n\/* T\u00edtulos \u2014 Libre Franklin 600 \u00b7 48\/58 *\/\n.vc-hero h1{\n  font-family:\"Libre Franklin\",sans-serif !important;\n  font-weight:600 !important; font-size:48px !important;\n  line-height:58px !important; letter-spacing:-.01em !important;\n  white-space:normal !important;\n}\n@media(max-width:879px){ .vc-hero h1{ font-size:34px !important; line-height:42px !important; } }\n\/* Subt\u00edtulos \u2014 Libre Franklin 600 \u00b7 32\/38 *\/\n.product-name, .product-content-header h3, .faq-section > h2, .seo-block h2{\n  font-family:\"Libre Franklin\",sans-serif !important;\n  font-weight:600 !important; font-size:32px !important;\n  line-height:38px !important; letter-spacing:-.01em !important;\n}\n@media(max-width:879px){\n  .product-name, .product-content-header h3, .faq-section > h2, .seo-block h2{\n    font-size:25px !important; line-height:31px !important;\n  }\n}\n\/* Textos \u2014 Lato 400 \u00b7 16\/24 *\/\n.vc-hero-lead, .product-content-header .sub, .faq-intro,\n.faq-list details p, .pane-cta-text, .seo-item p{\n  font-family:\"Lato\",sans-serif !important;\n  font-weight:400 !important; font-size:16px !important; line-height:24px !important;\n}\n\/* Botones \u2014 Lato 700 \u00b7 15\/15 *\/\n.vc-hero-cta, .vc-hero-contact, .pane-cta, .vc-cmodal .cta,\n.wt-cta-btn, .saber-mas, .ley-follow{\n  font-family:\"Lato\",sans-serif !important;\n  font-weight:700 !important; font-size:15px !important; line-height:15px !important;\n}\n<\/style>\n\n\n\n<!-- HERO oculto en WATS \u00b7 todo el contenido se integra en el panel CTA izquierdo -->\n<section class=\"vc-hero\" aria-label=\"Cabecera de producto\" data-vc-hero-injected=\"1\">\n  <div class=\"vc-hero-inner\">\n    <div>\n      <span class=\"vc-kicker\"><span class=\"vc-live-dot\"><\/span>WATS \u00b7 Intelig\u00eancia social<\/span>\n      <h1>O que dizem <span class=\"hl\">as pessoas que te interessam<\/span>?<\/h1>\n      <p class=\"vc-hero-lead\"><strong>WATS<\/strong> significa \u00abWhat Are They Saying?\u00bb (O que est\u00e3o a dizer?): o que dizem as associa\u00e7\u00f5es, os formadores de opini\u00e3o, os decisores e outros intervenientes-chave sobre os temas que te preocupam. Analisa a conversa p\u00fablica nas redes sociais e nos meios de comunica\u00e7\u00e3o para identificar posi\u00e7\u00f5es e tend\u00eancias.<\/p>\n      <div class=\"vc-hero-actions\">\n        <div class=\"vc-hero-wordmark\" role=\"img\" aria-label=\"WATS\">WATS<\/div>\n        <span class=\"updated\" id=\"updated-pill\" aria-live=\"polite\" style=\"background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.14);color:rgba(255,255,255,.85)\">\n          <span class=\"dot\"><\/span>\n          <span id=\"updated-text\">A carregar dados\u2026<\/span>\n        <\/span>\n      <\/div>\n    <\/div>\n    <div class=\"vc-hero-rail-card\" id=\"vc-hero-wheel\" role=\"group\" aria-label=\"Qu\u00e9 analiza WATS\">\n      <span class=\"vc-wheel-label\">O que analisamos<\/span>\n      <div class=\"vc-hero-wheel\">\n        <div class=\"vc-hero-wheel-track\">\n          <span class=\"vc-wheel-chip\"><span class=\"chip-ico\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"18\" cy=\"5\" r=\"3\"><\/circle><circle cx=\"6\" cy=\"12\" r=\"3\"><\/circle><circle cx=\"18\" cy=\"19\" r=\"3\"><\/circle><path d=\"M8.6 13.5l6.8 4M15.4 6.5l-6.8 4\"><\/path><\/svg><\/span>X, Instagram, TikTok e LinkedIn<\/span>\n          <span class=\"vc-wheel-chip\"><span class=\"chip-ico\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"><\/path><\/svg><\/span>Narrativas e mensagens<\/span>\n          <span class=\"vc-wheel-chip\"><span class=\"chip-ico\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.6l-1-1a5.5 5.5 0 0 0-7.8 7.8l1 1L12 21l7.8-7.6 1-1a5.5 5.5 0 0 0 0-7.8z\"><\/path><\/svg><\/span>Sentimentos positivos e negativos<\/span>\n          <span class=\"vc-wheel-chip\"><span class=\"chip-ico\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20.6 13.4l-7.2 7.2a2 2 0 0 1-2.8 0L2 12V2h10l8.6 8.6a2 2 0 0 1 0 2.8z\"><\/path><circle cx=\"7\" cy=\"7\" r=\"1.5\"><\/circle><\/svg><\/span>Temas e \u00e1reas setoriais<\/span>\n          <span class=\"vc-wheel-chip\"><span class=\"chip-ico\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"><\/path><circle cx=\"9\" cy=\"7\" r=\"4\"><\/circle><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"><\/path><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"><\/path><\/svg><\/span>Decisores pol\u00edticos<\/span>\n          <span class=\"vc-wheel-chip\"><span class=\"chip-ico\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"><\/rect><path d=\"M9 21V9h6v12M9 9V3M15 9V3\"><\/path><\/svg><\/span>Associa\u00e7\u00f5es e agentes<\/span>\n          <span class=\"vc-wheel-chip\"><span class=\"chip-ico\" aria-hidden=\"true\"><svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"><\/polyline><polyline points=\"17 6 23 6 23 12\"><\/polyline><\/svg><\/span>Tend\u00eancias de conversa\u00e7\u00e3o<\/span>\n          <!-- duplicado para loop infinito sin salto -->\n          <span class=\"vc-wheel-chip\" aria-hidden=\"true\"><span class=\"chip-ico\"><svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"18\" cy=\"5\" r=\"3\"><\/circle><circle cx=\"6\" cy=\"12\" r=\"3\"><\/circle><circle cx=\"18\" cy=\"19\" r=\"3\"><\/circle><path d=\"M8.6 13.5l6.8 4M15.4 6.5l-6.8 4\"><\/path><\/svg><\/span>X, Instagram, TikTok e LinkedIn<\/span>\n          <span class=\"vc-wheel-chip\" aria-hidden=\"true\"><span class=\"chip-ico\"><svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\"><\/path><\/svg><\/span>Narrativas e mensagens<\/span>\n          <span class=\"vc-wheel-chip\" aria-hidden=\"true\"><span class=\"chip-ico\"><svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20.8 4.6a5.5 5.5 0 0 0-7.8 0L12 5.6l-1-1a5.5 5.5 0 0 0-7.8 7.8l1 1L12 21l7.8-7.6 1-1a5.5 5.5 0 0 0 0-7.8z\"><\/path><\/svg><\/span>Sentimentos positivos e negativos<\/span>\n          <span class=\"vc-wheel-chip\" aria-hidden=\"true\"><span class=\"chip-ico\"><svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20.6 13.4l-7.2 7.2a2 2 0 0 1-2.8 0L2 12V2h10l8.6 8.6a2 2 0 0 1 0 2.8z\"><\/path><circle cx=\"7\" cy=\"7\" r=\"1.5\"><\/circle><\/svg><\/span>Temas e \u00e1reas setoriais<\/span>\n          <span class=\"vc-wheel-chip\" aria-hidden=\"true\"><span class=\"chip-ico\"><svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"><\/path><circle cx=\"9\" cy=\"7\" r=\"4\"><\/circle><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"><\/path><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"><\/path><\/svg><\/span>Decisores pol\u00edticos<\/span>\n          <span class=\"vc-wheel-chip\" aria-hidden=\"true\"><span class=\"chip-ico\"><svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"><\/rect><path d=\"M9 21V9h6v12M9 9V3M15 9V3\"><\/path><\/svg><\/span>Associa\u00e7\u00f5es e agentes<\/span>\n          <span class=\"vc-wheel-chip\" aria-hidden=\"true\"><span class=\"chip-ico\"><svg width=\"16\" height=\"16\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"><\/polyline><polyline points=\"17 6 23 6 23 12\"><\/polyline><\/svg><\/span>Tend\u00eancias de conversa\u00e7\u00e3o<\/span>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n\n<div class=\"wrap\">\n\n  \n\n  <noscript>\n    <div class=\"nojs\">\n  Esta p\u00e1gina usa JavaScript para mostrar gr\u00e1ficos interativos. Se o tiveres desativado, podes consultar os dados brutos em\n <a href=\"\/api\/dashboard-publico\/wats\/\">     \/api\/dashboard-publico\/wats\/.<\/a> \n    <\/div>\n  <\/noscript>\n\n  <!-- =========================================================\n       PRODUCTO: WATS\n       Datos: temas de conversaci\u00f3n p\u00fablica (WebVinces \/ Firestore)\n       ========================================================= -->\n  <section class=\"product-section\" aria-label=\"WATS \u00b7 Temas de la conversaci\u00f3n\" itemscope=\"\" itemtype=\"https:\/\/schema.org\/Dataset\">\n    <div class=\"product-grid\">\n      <div class=\"product-content\">\n        <div class=\"product-content-header\">\n          <div>\n            <h3>Temas de debate p\u00fablico<\/h3>\n            <p class=\"sub\">Descobre o que os pol\u00edticos e as associa\u00e7\u00f5es t\u00eam a dizer sobre os temas que te preocupam.<\/p>\n          <\/div>\n          <span class=\"period-tag\" id=\"periodo-pill\" hidden=\"\">\n            <svg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.1\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"17\" rx=\"2\"><\/rect><path d=\"M16 2v4M8 2v4M3 10h18\"><\/path><\/svg>\n            <span>Per\u00edodo \u00b7&nbsp;<b id=\"periodo-text\"><\/b><\/span>\n          <\/span>\n        <\/div>\n        <div class=\"wt-tree\">\n          <div class=\"filterbar\">\n            <span class=\"flabel\">Partes interessadas<\/span>\n            <button class=\"schip\" data-f=\"todos\">Todos<\/button>\n            <button class=\"schip\" data-f=\"pol\">Pol\u00edticos<\/button>\n            <button class=\"schip\" data-f=\"aso\">Associa\u00e7\u00f5es<\/button>\n          <\/div>\n          <div class=\"tchips\" id=\"tchips\"><\/div>\n          <div class=\"metrics\" id=\"metrics\"><\/div>\n          <div class=\"top-ents\" id=\"topents\" hidden=\"\"><\/div>\n          <div class=\"scope\" id=\"scope\"><\/div>\n          <p class=\"intro\" id=\"intro\" hidden=\"\"><\/p>\n          <div class=\"treebox\"><div id=\"canvas\"><\/div><div id=\"detail\" hidden=\"\"><\/div><\/div>\n          <div class=\"wt-cta-bar\">\n            <p class=\"wt-cta-txt\"><strong>Isto \u00e9 s\u00f3 uma amostra.<\/strong>  Pede a an\u00e1lise completa do teu setor: todos os temas, partes interessadas, publica\u00e7\u00f5es e a evolu\u00e7\u00e3o do sentimento.<\/p>\n            <button class=\"wt-cta-btn\" type=\"button\" id=\"wtCtaBtn\">Solicitar<span class=\"arr\" aria-hidden=\"true\">demonstra\u00e7\u00e3o\u2192<\/span><\/button>\n          <\/div>\n        <\/div>\n        <table class=\"sr-only\" id=\"tc-seo-table\" aria-label=\"Datos completos de temas de conversaci\u00f3n p\u00fablica\">\n          <caption>Temas de debate p\u00fablico detetados pelo WATS<\/caption>\n          <thead><tr><th scope=\"col\">Tema<\/th><th scope=\"col\">\u00c1mbito<\/th><th scope=\"col\">Frequ\u00eancia (publica\u00e7\u00f5es)<\/th><th scope=\"col\">Sentimento<\/th><th scope=\"col\">Descri\u00e7\u00e3o<\/th><\/tr><\/thead>\n          <tbody><\/tbody>\n        <\/table>\n      <\/div>\n    <\/div>\n  <\/section>\n\n  <!-- =========================================================\n       PREGUNTAS FRECUENTES\n       ========================================================= -->\n  <section class=\"faq-section\" aria-labelledby=\"faq-title\" id=\"faq\">\n    <h2 id=\"faq-title\">Perguntas frequentes<\/h2>\n    <p class=\"faq-intro\">Tudo o que precisas de saber sobre o WATS, a ferramenta de intelig\u00eancia social da Vinces para perceber o que se fala publicamente, as posi\u00e7\u00f5es e as tend\u00eancias.<\/p>\n    <article class=\"faq-block\" id=\"faqs-wats\">\n  <h3 class=\"faq-block-title\"><span class=\"faq-badge\">WATS<\/span> Intelig\u00eancia social<\/h3>\n  <div class=\"faq-list\">\n    <details><summary>O que \u00e9 o WATS?<\/summary><p>O WATS \u00e9 a ferramenta de intelig\u00eancia social da Vinces. O nome vem de \u00abWhat Are They Saying?\u00bb, ou seja: o que dizem as associa\u00e7\u00f5es, os l\u00edderes de opini\u00e3o, os decisores e outros intervenientes-chave sobre os temas que te interessam. Analisa a conversa p\u00fablica nas redes sociais e nos meios de comunica\u00e7\u00e3o para identificar posi\u00e7\u00f5es e tend\u00eancias.<\/p><\/details>\n    <details><summary>Que fontes p\u00fablicas \u00e9 que o WATS analisa?<\/summary><p>A WATS analisa as conversas p\u00fablicas nas redes sociais e nos meios digitais, incluindo o X, o LinkedIn, o Instagram, o TikTok, o YouTube, o Facebook, o Telegram p\u00fablico, os blogs e os meios digitais.<\/p><\/details>\n    <details><summary>Que an\u00e1lise faz o WATS sobre os temas detetados?<\/summary><p>Organiza a conversa por temas, \u00e1reas setoriais, intervenientes, tom e evolu\u00e7\u00e3o. Assim, ajuda a perceber quais as posi\u00e7\u00f5es que se est\u00e3o a consolidar e quais as tend\u00eancias que come\u00e7am a ganhar relev\u00e2ncia. <\/p><\/details>\n    <details><summary>Por que \u00e9 que vale a pena perceber o que dizem os principais intervenientes?<\/summary><p>Porque o debate p\u00fablico antecipa prioridades, posi\u00e7\u00f5es e tend\u00eancias relevantes para a tua organiza\u00e7\u00e3o. O WATS ajuda a identificar quais os temas que est\u00e3o a ganhar for\u00e7a, quem os impulsiona e como evoluem nas redes sociais e nos meios de comunica\u00e7\u00e3o. <\/p><\/details>\n    <details><summary>Consegues detetar crises de reputa\u00e7\u00e3o?<\/summary><p>Sim. O WATS avisa-te quando um tema relacionado com a tua organiza\u00e7\u00e3o (ou com o teu setor) entra numa din\u00e2mica negativa ou se torna viral rapidamente. <\/p><\/details>\n    <details><summary>Que m\u00e9tricas \u00e9 que ele apresenta por tema?<\/summary><p>Frequ\u00eancia (n\u00famero de publica\u00e7\u00f5es), sentimento predominante, \u00e2mbito, evolu\u00e7\u00e3o ao longo do tempo, principais emissores e cita\u00e7\u00f5es relevantes.<\/p><\/details>\n    <details><summary>Posso acompanhar um tema espec\u00edfico?<\/summary><p>Sim. Defines palavras-chave ou conceitos e o WATS mostra-te o painel de atividade sobre esse tema em tempo real. <\/p><\/details>\n    <details><summary>Tamb\u00e9m segues jornalistas e a opini\u00e3o p\u00fablica?<\/summary><p>Sim. Al\u00e9m de cargos pol\u00edticos, inclu\u00edmos jornalistas especializados, l\u00edderes de opini\u00e3o de diversos setores, sindicatos, associa\u00e7\u00f5es patronais e outras associa\u00e7\u00f5es. <\/p><\/details>\n    <details><summary>Funciona em espanhol e nas l\u00ednguas cooficiais?<\/summary><p>Sim. Processa conte\u00fados em espanhol, catal\u00e3o, galego e basco com a mesma qualidade. <\/p><\/details>\n    <details><summary>Fazes uma an\u00e1lise comparativa entre os partidos?<\/summary><p>Sim. Podes comparar a forma como o PSOE, o PP, o VOX, o Sumar, o ERC, o Junts, o EH Bildu, o PNV ou qualquer outro grupo aborda um tema, com que intensidade e com que sentimento. <\/p><\/details>\n    <details><summary>Tem uma API?<\/summary><p>Sim. Temos uma API para integrares as an\u00e1lises nos teus pain\u00e9is internos. <\/p><\/details>\n    <details><summary>Quanto custa?<\/summary><p>Depende do \u00e2mbito tem\u00e1tico e do volume de monitoriza\u00e7\u00e3o. Pede uma an\u00e1lise personalizada ao entrares em <a href=\"https:\/\/vincesconsulting.com\/pt-pt\/contacto\/\" rel=\"noopener\">contacto connosco<\/a>. <\/p><\/details>\n  <\/div>\n<\/article>\n\n    \n\n  <\/section>\n\n<\/div>\n\n<script>\n\/*\n * Helpers compartidos por todas las p\u00e1ginas de producto (FREN, PolicyAlert,\n * Poder Digital, WATS). Se exponen en `window.VincesDash` para que cada\n * p\u00e1gina pueda invocarlos sin duplicar c\u00f3digo.\n *\n * IMPORTANT: las p\u00e1ginas standalone descargadas por \"Descargar HTML externo\"\n * inlinean este script. Mantenerlo autocontenido (sin imports).\n *\/\n(function () {\n  \"use strict\";\n\n  const LOCALE = \"es-ES\";\n  const REFRESH_MS = 30 * 60 * 1000;\n\n  const $ = (s, r) => (r || document).querySelector(s);\n  const $$ = (s, r) => Array.from((r || document).querySelectorAll(s));\n\n  function fmtDate(iso) {\n    if (!iso) return \"\";\n    try {\n      return new Date(iso).toLocaleDateString(LOCALE, {\n        day: \"2-digit\", month: \"long\", year: \"numeric\",\n      });\n    } catch { return iso; }\n  }\n  function fmtDateTime(iso) {\n    if (!iso) return \"\";\n    try {\n      return new Date(iso).toLocaleString(LOCALE, {\n        day: \"2-digit\", month: \"short\", year: \"numeric\",\n        hour: \"2-digit\", minute: \"2-digit\",\n      });\n    } catch { return iso; }\n  }\n  function escapeHtml(s) {\n    return String(s == null ? \"\" : s)\n      .replace(\/&\/g, \"&amp;\").replace(\/<\/g, \"&lt;\").replace(\/>\/g, \"&gt;\")\n      .replace(\/\"\/g, \"&quot;\").replace(\/'\/g, \"&#39;\");\n  }\n  function initials(name) {\n    return (name || \"?\").trim().split(\/\\s+\/).slice(0, 2).map(p => p[0]).join(\"\").toUpperCase();\n  }\n\n  \/**\n   * Carga est\u00e1ndar de los endpoints p\u00fablicos del dashboard.\n   * - apiUrl: URL absoluta o relativa al endpoint \/api\/dashboard-publico\/...\n   * - onData: callback(data) llamado en \u00e9xito.\n   * - onError: callback(message, kind) llamado en error. kind: \"network\" | \"http\" | \"json\" | \"render\".\n   *\/\n  async function loadDashboardData(apiUrl, onData, onError) {\n    let response;\n    try {\n      response = await fetch(apiUrl, {\n        method: \"GET\",\n        headers: { Accept: \"application\/json\" },\n        mode: \"cors\",\n        cache: \"no-cache\",\n      });\n    } catch (err) {\n      console.error(\"[Dashboard] Network\/CORS error:\", err);\n      const isFileProtocol = window.location.protocol === \"file:\";\n      const msg = isFileProtocol\n        ? `No se pudieron cargar los datos desde <code>${escapeHtml(apiUrl)}<\/code>. <br>Si has abierto este HTML como archivo local, s\u00edrvelo desde un servidor web (no <code>file:\/\/<\/code>) o aseg\u00farate de que el endpoint permite el origen <code>null<\/code>.`\n        : `No se pudieron cargar los datos desde <code>${escapeHtml(apiUrl)}<\/code>. <br>Comprueba la configuraci\u00f3n CORS del backend para el origen actual: <code>${escapeHtml(window.location.origin)}<\/code>.`;\n      onError && onError(msg, \"network\");\n      return;\n    }\n    if (!response.ok) {\n      console.error(\"[Dashboard] HTTP error:\", response.status);\n      onError && onError(`El servidor devolvi\u00f3 HTTP ${response.status} al consultar <code>${escapeHtml(apiUrl)}<\/code>.`, \"http\");\n      return;\n    }\n    let data;\n    try {\n      data = await response.json();\n    } catch (err) {\n      console.error(\"[Dashboard] JSON parse error:\", err);\n      onError && onError(\"La respuesta no es JSON v\u00e1lido.\", \"json\");\n      return;\n    }\n    try {\n      onData && onData(data);\n    } catch (err) {\n      console.error(\"[Dashboard] Render error:\", err);\n      onError && onError(\"Error al renderizar los datos.\", \"render\");\n    }\n  }\n\n  \/**\n   * Pinta el pill de \"Actualizado...\" en la cabecera y gestiona el estado de error.\n   *\/\n  function setUpdatedPill(data, errMessage) {\n    const pill = $(\"#updated-pill\");\n    const txt = $(\"#updated-text\");\n    if (!pill || !txt) return;\n    if (errMessage) {\n      pill.classList.add(\"err\");\n      txt.textContent = errMessage;\n    } else {\n      pill.classList.remove(\"err\");\n      txt.textContent = \"Actualizado \" + fmtDateTime((data && data.generated_at) || new Date().toISOString());\n    }\n  }\n\n  \/**\n   * Bot\u00f3n \"Descargar HTML externo\": clona el DOM, elimina elementos de test,\n   * sustituye la API_URL relativa por una absoluta y descarga como fichero\n   * \u00fanico listo para WordPress.\n   *\/\n  function bindDownloadExternalHtml(absApiUrl) {\n    const btn = $(\"#download-html-btn\");\n    if (!btn) return;\n    btn.addEventListener(\"click\", () => {\n      try {\n        btn.dataset.state = \"generating\";\n        btn.querySelector(\".lbl\").textContent = \"Generando\u2026\";\n\n        const cloned = document.documentElement.cloneNode(true);\n        cloned.querySelectorAll(\".testbar, #download-html-btn\").forEach(el => el.remove());\n\n        cloned.querySelectorAll(\"script\").forEach(s => {\n          const txt = s.textContent || \"\";\n          if (txt.includes(\"DEFAULT_API_URL\")) {\n            s.textContent = txt.replace(\n              \/const\\s+DEFAULT_API_URL\\s*=\\s*[\"'][^\"']*[\"'];\/,\n              `const DEFAULT_API_URL = ${JSON.stringify(absApiUrl)};`\n            );\n          }\n        });\n\n        const banner =\n          \"\\n<!--\\n\" +\n          \"  Dashboard Vinces \u00b7 p\u00e1gina standalone por producto\\n\" +\n          \"  Generado: \" + new Date().toISOString() + \"\\n\" +\n          \"  Endpoint API: \" + absApiUrl + \"\\n\" +\n          \"\\n\" +\n          \"  C\u00f3mo integrarlo en WordPress:\\n\" +\n          \"    1. Editor de la p\u00e1gina \u2192 bloque 'HTML personalizado'.\\n\" +\n          \"    2. Pega el fichero completo (todo, incluyendo <html>, <head>, <body>).\\n\" +\n          \"       En la mayor\u00eda de temas WP basta con pegar a partir de <body>.\\n\" +\n          \"    3. Aseg\u00farate de que el dominio WP est\u00e1 incluido en CORS del backend.\\n\" +\n          \"    4. El cliente refresca cada 30 min; el backend cachea 1h.\\n\" +\n          \"-->\\n\";\n        const html = \"<!DOCTYPE html>\\n\" + cloned.outerHTML.replace(\/^<html\/, banner + \"<html\");\n\n        const blob = new Blob([html], { type: \"text\/html;charset=utf-8\" });\n        const url = URL.createObjectURL(blob);\n        const a = document.createElement(\"a\");\n        a.href = url;\n        const stamp = new Date().toISOString().slice(0, 10);\n        a.download = `dashboard-vinces-${(window.VincesDash && window.VincesDash.product) || \"page\"}-${stamp}.html`;\n        document.body.appendChild(a);\n        a.click();\n        document.body.removeChild(a);\n        setTimeout(() => URL.revokeObjectURL(url), 2000);\n\n        btn.dataset.state = \"done\";\n        btn.querySelector(\".lbl\").textContent = \"\u2714 Descargado\";\n        setTimeout(() => {\n          btn.removeAttribute(\"data-state\");\n          btn.querySelector(\".lbl\").textContent = \"Descargar HTML externo\";\n        }, 2500);\n      } catch (err) {\n        console.error(\"[download-html] error:\", err);\n        btn.removeAttribute(\"data-state\");\n        btn.querySelector(\".lbl\").textContent = \"Error al generar\";\n        setTimeout(() => { btn.querySelector(\".lbl\").textContent = \"Descargar HTML externo\"; }, 2500);\n      }\n    });\n  }\n\n  \/**\n   * Inicializa carruseles tipo tabs sobre cualquier elemento [data-carousel].\n   * Cuando un pane se activa, ejecuta el callback registrado en\n   * window.VincesDash.onPaneActivated[paneId] (si existe).\n   *\/\n  function initCarousels() {\n    document.querySelectorAll(\"[data-carousel]\").forEach(scope => {\n      const tabs = scope.querySelectorAll(\".car-tab\");\n      const panes = scope.querySelectorAll(\".car-pane\");\n      tabs.forEach(btn => {\n        btn.addEventListener(\"click\", () => {\n          const target = btn.getAttribute(\"data-pane\");\n          tabs.forEach(b => {\n            b.classList.toggle(\"active\", b === btn);\n            b.setAttribute(\"aria-selected\", b === btn ? \"true\" : \"false\");\n          });\n          panes.forEach(p => {\n            p.classList.toggle(\"active\", p.id === target);\n          });\n          const cb = window.VincesDash && window.VincesDash.onPaneActivated && window.VincesDash.onPaneActivated[target];\n          if (typeof cb === \"function\") cb();\n        });\n      });\n    });\n  }\n\n  window.VincesDash = Object.assign(window.VincesDash || {}, {\n    LOCALE,\n    REFRESH_MS,\n    $, $$,\n    fmtDate, fmtDateTime, escapeHtml, initials,\n    loadDashboardData,\n    setUpdatedPill,\n    bindDownloadExternalHtml,\n    initCarousels,\n    onPaneActivated: {},\n  });\n})();\n<\/script>\n\n\n<script>\n(() => {\n  \"use strict\";\n  const DEFAULT_API_URL = \"https:\/\/vision360.vincesconsulting.com\/api\/dashboard-publico\/wats\/\";\n  const { $, fmtDate, escapeHtml, loadDashboardData, setUpdatedPill, bindDownloadExternalHtml } = window.VincesDash;\n  const REFRESH_MS = window.VincesDash.REFRESH_MS;\n  window.VincesDash.product = \"wats\";\n  const esc = escapeHtml;\n\n  \/* ===== Etiquetas de \u00e1mbito (para tablas SEO + meta) ===== *\/\n  const TC_AMBITO_LABELS = {\n    \"todos\":{label:\"Todos los \u00e1mbitos\"},\"sanidad\":{label:\"Sanidad\"},\"vivienda\":{label:\"Vivienda\"},\n    \"economia\":{label:\"Econom\u00eda y empleo\"},\"educacion\":{label:\"Educaci\u00f3n\"},\"fiscalidad\":{label:\"Fiscalidad\"},\n    \"medioambiente\":{label:\"Medio ambiente\"},\"energia\":{label:\"Energ\u00eda\"},\"social\":{label:\"Social\"},\n    \"infraestructuras\":{label:\"Infraestructuras\"},\"politica\":{label:\"Pol\u00edtica\"},\n  };\n\n  \/* ===== Tablas SEO (temas_conversacion; fallback al informe report) ===== *\/\n  function seoRowsFromReport(rep) {\n    const out = [];\n    (rep.themes || []).forEach(t => {\n      (t.sub || []).forEach(s => {\n        out.push({\n          topic: s.label || \"\",\n          ambito: t.label || t.id || \"\",\n          frequency: (s.pol || 0) + (s.aso || 0),\n          sentiment: s.sent || \"\",\n          description: s.summary || \"\",\n        });\n      });\n    });\n    return out.sort((a, b) => (b.frequency || 0) - (a.frequency || 0));\n  }\n  function renderSeoTables(data) {\n    const tc = data.temas_conversacion;\n    let items = (tc && tc.topics) || [];\n    let labelOf = t => TC_AMBITO_LABELS[t.ambito]?.label || t.ambito || \"\u2014\";\n    if (!items.length && data.report && (data.report.themes || []).length) {\n      items = seoRowsFromReport(data.report);\n      labelOf = t => t.ambito || \"\u2014\";\n    }\n    const convBody = document.querySelector(\"#seo-table-conversacion tbody\");\n    if (convBody) {\n      if (!items.length) {\n        convBody.innerHTML = '<tr><td colspan=\"5\" class=\"muted-cell\">Sin datos de conversaci\u00f3n p\u00fablica disponibles.<\/td><\/tr>';\n      } else {\n        const sorted = [...items].sort((a, b) => (b.frequency || 0) - (a.frequency || 0));\n        convBody.innerHTML = sorted.map(t => {\n          return `<tr><td>${esc(t.topic || \"\u2014\")}<\/td><td>${esc(labelOf(t))}<\/td><td>${t.frequency || 0}<\/td><td>${esc(t.sentiment || \"\u2014\")}<\/td><td>${esc(t.description || \"\")}<\/td><\/tr>`;\n        }).join(\"\");\n      }\n    }\n    const seoBody = document.querySelector(\"#tc-seo-table tbody\");\n    if (seoBody) {\n      seoBody.innerHTML = items.map(t => {\n        return `<tr><td>${esc(t.topic)}<\/td><td>${esc(labelOf(t))}<\/td><td>${t.frequency || 0}<\/td><td>${esc(t.sentiment || \"\")}<\/td><td>${esc(t.description || \"\")}<\/td><\/tr>`;\n      }).join(\"\");\n    }\n  }\n\n  \/* ===== Meta del panel CTA izquierdo ===== *\/\n  function updateMeta(data) {\n    const tc = data.temas_conversacion || {};\n    const rep = data.report || {};\n    \/\/ Periodo analizado \u2192 badge de cabecera (siempre visible)\n    let periodoTxt = \"\";\n    const iDate = tc.initial_date || rep.initial_date || (rep.period && rep.period.initial_date);\n    const eDate = tc.end_date || rep.end_date || (rep.period && rep.period.end_date);\n    if (iDate && eDate) {\n      const a = new Date(iDate), b = new Date(eDate);\n      const fmt = d => d.toLocaleDateString(\"es-ES\", { day:\"numeric\", month:\"short\" }).replace(\".\", \"\");\n      periodoTxt = `${a.getDate()}\\u2013${fmt(b)} ${b.getFullYear()}`;\n    }\n    const pPill = document.getElementById(\"periodo-pill\"), pTxt = document.getElementById(\"periodo-text\");\n    if (pPill && pTxt) { if (periodoTxt) { pTxt.textContent = periodoTxt; pPill.hidden = false; } else { pPill.hidden = true; } }\n\n    const metaEl = document.querySelector(\"[data-stat='meta']\");\n    if (!metaEl) return;\n    const repThemes = rep.themes || [];\n    const repSubs = repThemes.reduce((n, t) => n + ((t.sub || []).length), 0);\n    const topics = tc.topics || [];\n    const total = repSubs || tc.total_topics || topics.length;\n    const ambitos = repThemes.length || new Set(topics.map(t => t.ambito)).size;\n    const ICONS = {\n      topics:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 3v18h18\"\/><path d=\"M7 14l4-4 4 4 5-7\"\/><\/svg>',\n      tag:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\"\/><circle cx=\"7\" cy=\"7\" r=\"1.2\" fill=\"currentColor\"\/><\/svg>',\n      cal:'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"17\" rx=\"2\"\/><path d=\"M16 2v4M8 2v4M3 10h18\"\/><\/svg>',\n    };\n    const li = [\n      `<li>${ICONS.topics}<span><b>${total}<\/b> temas<\/span><\/li>`,\n      ambitos ? `<li>${ICONS.tag}<span><b>${ambitos}<\/b> \\u00e1mbitos<\/span><\/li>` : \"\",\n      periodoTxt ? `<li>${ICONS.cal}<span>${esc(periodoTxt)}<\/span><\/li>` : \"\",\n    ].filter(Boolean);\n    metaEl.innerHTML = li.join(\"\");\n  }\n\n  \/* ===== Treemap de tendencias ===== *\/\n  const GROUPS = { pol:{label:\"Pol\u00edticos\",color:\"#1F2547\"}, aso:{label:\"Asociaciones\",color:\"#B9C2D9\"}, todos:{label:\"Todos\",color:\"#8A90A3\"} };\n  const SENTC = { positivo:{c:\"#2E7D4A\",l:\"Positivo\"}, neutro:{c:\"#E3B341\",l:\"Neutro\"}, neutral:{c:\"#E3B341\",l:\"Neutro\"}, mixto:{c:\"#F3A53A\",l:\"Mixto\"}, negativo:{c:\"#C0392B\",l:\"Negativo\"} };\n  function sentColor(s){ return (SENTC[s]||SENTC.mixto).c; }\n  const NET = { x:\"X\", instagram:\"Instagram\", linkedin:\"LinkedIn\", tiktok:\"TikTok\" };\n  const NET_ICONS = {\n    x:'<path d=\"M4 4l16 16M20 4L4 20\"\/>',\n    instagram:'<rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"17\" rx=\"5\"\/><circle cx=\"12\" cy=\"12\" r=\"4\"\/><circle cx=\"17\" cy=\"7\" r=\"1.05\" fill=\"currentColor\" stroke=\"none\"\/>',\n    linkedin:'<rect x=\"3.5\" y=\"3.5\" width=\"17\" height=\"17\" rx=\"3.5\"\/><path d=\"M7.6 10.6V16M7.6 7.7v.02M11 16v-3.3a1.9 1.9 0 0 1 3.8 0V16\"\/>',\n    tiktok:'<path d=\"M9.6 5v9.7a3.1 3.1 0 1 1-3.1-3.1\"\/><path d=\"M9.6 5c.5 2.7 2.4 4.4 5.2 4.6\"\/>'\n  };\n  function netIcon(net){ const p=NET_ICONS[(net||\"\").toLowerCase()]; return p?'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.8\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">'+p+'<\/svg>':''; }\n  let THEMES = [], st = { filter:\"todos\", level:1, theme:null, sub:null };\n  function _h2hsl(hex){ const m=\/^#?([0-9a-f]{6})$\/i.exec(hex||\"\"); if(!m) return null; const n=parseInt(m[1],16); let r=(n>>16&255)\/255,g=(n>>8&255)\/255,b=(n&255)\/255; const mx=Math.max(r,g,b),mn=Math.min(r,g,b); let h=0,s=0,l=(mx+mn)\/2; if(mx!==mn){ const d=mx-mn; s=l>.5?d\/(2-mx-mn):d\/(mx+mn); h=mx===r?(g-b)\/d+(g<b?6:0):mx===g?(b-r)\/d+2:(r-g)\/d+4; h\/=6; } return {h:h*360,s:s,l:l}; } function _hsl2h(h,s,l){ h\/=360; const f=(p,q,t)=>{ if(t<0)t++; if(t>1)t--; if(t<1\/6)return p+(q-p)*6*t; if(t<1\/2)return q; if(t<2\/3)return p+(q-p)*(2\/3-t)*6; return p; }; let r,g,b; if(s===0){r=g=b=l;}else{ const q=l<.5?l*(1+s):l+s-l*s,p=2*l-q; r=f(p,q,h+1\/3);g=f(p,q,h);b=f(p,q,h-1\/3); } const to=v=>('0'+Math.round(v*255).toString(16)).slice(-2); return '#'+to(r)+to(g)+to(b); }\n  function intenseColor(hex){ const c=_h2hsl(hex); if(!c) return hex; return _hsl2h(c.h,Math.max(0.3,Math.min(c.s,0.46)),Math.min(c.l,0.45)); }\n  function softenThemes(){ THEMES.forEach(t=>{ const c=_h2hsl(t.color); if(!c) return; t._c0=t.color; const s=Math.min(c.s*0.8,0.46), l=c.l+(1-c.l)*0.25; t.color=_hsl2h(c.h,s,l); }); }\n\n  \/* Iconos por \u00e1mbito (se ti\u00f1en con el color del tema v\u00eda currentColor) *\/\n  const TOPIC_ICONS = {\n    sanidad:'<rect x=\"9.5\" y=\"3\" width=\"5\" height=\"18\" rx=\"1\"\/><rect x=\"3\" y=\"9.5\" width=\"18\" height=\"5\" rx=\"1\"\/>',\n    vivienda:'<path d=\"M3 11l9-8 9 8\"\/><path d=\"M5 10v10h14V10\"\/>',\n    economia:'<path d=\"M3 17l6-6 4 4 7-8\"\/><path d=\"M17 7h4v4\"\/>',\n    educacion:'<path d=\"M2 8l10-4 10 4-10 4z\"\/><path d=\"M6 10.5V16c0 1.5 3 3 6 3s6-1.5 6-3v-5.5\"\/>',\n    fiscalidad:'<line x1=\"19\" y1=\"5\" x2=\"5\" y2=\"19\"\/><circle cx=\"7.5\" cy=\"7.5\" r=\"2.4\"\/><circle cx=\"16.5\" cy=\"16.5\" r=\"2.4\"\/>',\n    medioambiente:'<path d=\"M5 20s1.5-11 15-15c0 0 1.5 11-8 15-3.5 1.4-7 0-7 0z\"\/><path d=\"M5 20c3.5-5.5 7.5-8 11.5-9\"\/>',\n    energia:'<path d=\"M13 2L4 14h7l-1 8 9-12h-7z\"\/>',\n    social:'<circle cx=\"9\" cy=\"8\" r=\"3.1\"\/><path d=\"M3.5 20c0-3.3 2.8-5.3 5.5-5.3s5.5 2 5.5 5.3\"\/><path d=\"M16 5.4a3 3 0 0 1 0 5.7\"\/><path d=\"M20.5 20c0-2.5-1.5-4.2-3.4-4.9\"\/>',\n    infraestructuras:'<rect x=\"4\" y=\"3\" width=\"16\" height=\"18\" rx=\"1\"\/><path d=\"M8 7h2M14 7h2M8 11h2M14 11h2M8 15h2M14 15h2\"\/>',\n    politica:'<path d=\"M3 9l9-6 9 6\"\/><path d=\"M5 9v9M9.5 9v9M14.5 9v9M19 9v9\"\/><path d=\"M3 21h18\"\/>',\n    _default:'<circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M8.5 10h7M8.5 14h5\"\/>'\n  };\n  function topicIcon(id,label){\n    let k=(id||\"\").toLowerCase();\n    if(!TOPIC_ICONS[k]){ const L=(label||\"\").toLowerCase(); k=Object.keys(TOPIC_ICONS).find(key=>key!==\"_default\"&&L.indexOf(key)>=0)||\"\"; }\n    const p=TOPIC_ICONS[k]||TOPIC_ICONS._default;\n    return '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.9\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">'+p+'<\/svg>';\n  }\n\n  function vol(sub, f){ return f === \"todos\" ? ((sub.pol||0)+(sub.aso||0)) : (sub[f]||0); }\n  function themeVol(t, f){ return (t.sub||[]).reduce((s,x)=>s+vol(x,f),0); }\n  function hex2rgb(h){ h=h.replace(\"#\",\"\"); return [parseInt(h.substr(0,2),16),parseInt(h.substr(2,2),16),parseInt(h.substr(4,2),16)]; }\n  function lum(r,g,b){ return 0.299*r+0.587*g+0.114*b; }\n  function fgFor(hex){ const c=hex2rgb(hex); return lum(c[0],c[1],c[2])>150?\"#1F2547\":\"#ffffff\"; }\n  function tint(hex,f){ const c=hex2rgb(hex),w=(1-f)*0.82; const r=Math.round(c[0]+(255-c[0])*w),g=Math.round(c[1]+(255-c[1])*w),b=Math.round(c[2]+(255-c[2])*w); return {css:\"rgb(\"+r+\",\"+g+\",\"+b+\")\",fg:lum(r,g,b)>150?\"#1F2547\":\"#ffffff\"}; }\n  function worst(row,s,side){ let rmax=-Infinity,rmin=Infinity; for(let k=0;k<row.length;k++){ if(row[k].a>rmax)rmax=row[k].a; if(row[k].a<rmin)rmin=row[k].a; } const s2=s*s,w2=side*side; return Math.max((w2*rmax)\/s2, s2\/(w2*rmin)); }\n  function treemap(values,width,height){\n    const idx=values.map((v,i)=>({a:v,i})).sort((a,b)=>b.a-a.a);\n    const total=idx.reduce((s,o)=>s+o.a,0)||1, scale=(width*height)\/total;\n    const items=idx.map(o=>({a:o.a*scale,i:o.i})), out=new Array(values.length);\n    let x=0,y=0,w=width,h=height,i=0;\n    while(i<items.length){\n      const side=Math.min(w,h); let row=[items[i]],s=items[i].a,j=i+1;\n      while(j<items.length){ const ns=s+items[j].a; if(worst(row.concat(items[j]),ns,side)<=worst(row,s,side)){ row.push(items[j]); s=ns; j++; } else break; }\n      const thick=s\/side;\n      if(w>=h){ let oy=y; for(let r=0;r<row.length;r++){ const chh=(row[r].a\/s)*h; out[row[r].i]={x,y:oy,w:thick,h:chh}; oy+=chh; } x+=thick; w-=thick; }\n      else{ let ox=x; for(let r2=0;r2<row.length;r2++){ const cww=(row[r2].a\/s)*w; out[row[r2].i]={x:ox,y,w:cww,h:thick}; ox+=cww; } y+=thick; h-=thick; }\n      i=j;\n    }\n    return out;\n  }\n  function build(container,items){\n    container.innerHTML=\"\";\n    const W=container.clientWidth||640, H=container.clientHeight||520;\n    const rects=treemap(items.map(it=>it.value),W,H);\n    items.forEach((it,idx)=>{\n      const r=rects[idx],box=document.createElement(\"div\");box.className=\"box\";\n      box.style.left=(r.x+3)+\"px\";box.style.top=(r.y+3)+\"px\";box.style.width=Math.max(0,r.w-6)+\"px\";box.style.height=Math.max(0,r.h-6)+\"px\";\n      box.style.background=it.color;box.style.color=it.fg;\n      if(r.w>48&&r.h>30){ const lbl=document.createElement(\"div\");lbl.className=\"lbl\";lbl.textContent=it.label;lbl.style.fontSize=Math.max(12,Math.min(20,Math.round(r.w\/10)))+\"px\";box.appendChild(lbl);\n        if(r.h>58){ const num=document.createElement(\"div\");num.className=\"num\";num.textContent=it.num;box.appendChild(num); } }\n      box.onclick=it.onclick;container.appendChild(box);\n    });\n  }\n  const canvas=document.getElementById(\"canvas\"), detail=document.getElementById(\"detail\"), scope=document.getElementById(\"scope\"), intro=document.getElementById(\"intro\");\n  function allSubs(){ const a=[]; THEMES.forEach(t=>{(t.sub||[]).forEach(x=>a.push(x));}); return a; }\n  function renderMetrics(){\n    const f=st.filter, subs=subsInView();\n    \/\/ Reparto pol\/aso sobre el \u00e1mbito en vista (cambia con el filtro de tema)\n    const polV=subs.reduce((s,x)=>s+(x.pol||0),0), asoV=subs.reduce((s,x)=>s+(x.aso||0),0), tot2=(polV+asoV)||1;\n    const polPct=Math.round(polV\/tot2*100), asoPct=100-polPct;\n    const polC=GROUPS.pol.color, asoC=GROUPS.aso.color;\n    const repartoHTML='<div class=\"split\"><div class=\"split-bar\">'+\n      '<span class=\"seg\" data-g=\"pol\" title=\"Pol\u00edticos '+polPct+'%\" style=\"width:'+polPct+'%;background:'+polC+'\"><\/span>'+\n      '<span class=\"seg\" data-g=\"aso\" title=\"Asociaciones '+asoPct+'%\" style=\"width:'+asoPct+'%;background:'+asoC+'\"><\/span><\/div>'+\n      '<div class=\"split-legend\"><span data-g=\"pol\"><i style=\"background:'+polC+'\"><\/i>Pol. <b>'+polPct+'%<\/b><\/span>'+\n      '<span data-g=\"aso\"><i style=\"background:'+asoC+'\"><\/i>Aso. <b>'+asoPct+'%<\/b><\/span><\/div><\/div>';\n    \/\/ Sentimiento sobre el \u00e1mbito en vista (cambia con el filtro de tema)\n    const sentDefs=[\n      {g:\"pos\",keys:[\"positivo\"],label:\"Pos.\",color:\"#4FA873\"},\n      {g:\"neu\",keys:[\"neutro\",\"neutral\"],label:\"Neu.\",color:\"#EDBB3C\"},\n      {g:\"mix\",keys:[\"mixto\"],label:\"Mix.\",color:\"#F3A53A\"},\n      {g:\"neg\",keys:[\"negativo\"],label:\"Neg.\",color:\"#D15F4D\"}\n    ];\n    let sTot=0; sentDefs.forEach(d=>{ d.v=subs.filter(x=>d.keys.indexOf(x.sent)>=0).reduce((s,x)=>s+vol(x,f),0); sTot+=d.v; }); sTot=sTot||1;\n    const sentBar='<div class=\"split\"><div class=\"split-bar\">'+\n      sentDefs.map(d=>{ const w=d.v\/sTot*100; return w>0?'<span class=\"seg\" data-g=\"s_'+d.g+'\" title=\"'+d.label.replace(\".\",\"\")+' '+Math.round(w)+'%\" style=\"width:'+w+'%;background:'+d.color+'\"><\/span>':''; }).join('')+\n      '<\/div><div class=\"split-legend\">'+\n      sentDefs.map(d=>{ const w=d.v\/sTot*100; return w>0?'<span data-g=\"s_'+d.g+'\"><i style=\"background:'+d.color+'\"><\/i>'+d.label+' <b>'+Math.round(w)+'%<\/b><\/span>':''; }).join('')+\n      '<\/div><\/div>';\n    \/\/ Positivo \/ negativo: temas (vista general) o subtemas del tema seleccionado\n    let best, worst, useIcon=false;\n    if(st.theme){\n      const tv=themeVol(st.theme,f)||0, ssub=st.theme.sub||[];\n      const pick=(sent)=>{ let c=null,mv=-1; ssub.forEach(s=>{ if(s.sent===sent){ const vv=vol(s,f); if(vv>mv){mv=vv;c=s;} } }); return c?{label:c.label,r:tv>0?vol(c,f)\/tv:0,has:true}:{label:\"\u2014\",r:0,has:false}; };\n      best=pick(\"positivo\"); worst=pick(\"negativo\");\n    } else {\n      useIcon=true;\n      best={label:\"\u2014\",id:\"\",color:\"\",r:-1,has:false}; worst={label:\"\u2014\",id:\"\",color:\"\",r:-1,has:false};\n      THEMES.forEach(t=>{ const tv=themeVol(t,f); if(tv<=0) return;\n        const pos=(t.sub||[]).filter(x=>x.sent===\"positivo\").reduce((s,x)=>s+vol(x,f),0)\/tv;\n        const neg=(t.sub||[]).filter(x=>x.sent===\"negativo\").reduce((s,x)=>s+vol(x,f),0)\/tv;\n        if(pos>best.r) best={label:t.label,id:t.id,color:t.color,r:pos,has:true};\n        if(neg>worst.r) worst={label:t.label,id:t.id,color:t.color,r:neg,has:true}; });\n    }\n    const oneCard=(o,kind)=>'<div class=\"climate-one\"><div class=\"cl-top\">'+((useIcon&&o.id)?'<span class=\"cl-ic\">'+topicIcon(o.id,o.label)+'<\/span>':'')+'<span class=\"cl-pct '+kind+'\">'+(o.has?Math.round(Math.max(o.r,0)*100)+'%':'\u2014')+'<\/span><\/div><span class=\"cl-nm\">'+esc(o.label)+'<\/span><\/div>';\n    const m=[\n      {k:\"Pol\u00edticos vs Asociaciones\",v:repartoHTML},\n      {k:'<span style=\"color:#3F875C\">\u25b2 Positivo<\/span>',v:oneCard(best,\"pos\")},\n      {k:'<span style=\"color:#C2564A\">\u25bc Negativo<\/span>',v:oneCard(worst,\"neg\")},\n      {k:\"Sentimiento\",v:sentBar}\n    ];\n    $(\"#metrics\").innerHTML=m.map(x=>'<div class=\"metric\"><p class=\"k\">'+x.k+'<\/p><div class=\"v\">'+x.v+'<\/div><\/div>').join(\"\");\n  }\n  function subsInView(){\n    if(st.level===2 && st.theme) return st.theme.sub||[];\n    if(st.level===3 && st.sub) return [st.sub];\n    return allSubs();\n  }\n  function subEntities(s){\n    \/* El backend ya env\u00eda sub[].entities[] (name, group, count real, role). *\/\n    return (s && s.entities && s.entities.length) ? s.entities : [];\n  }\n  function roleLabel(group,role){ if(role) return role; if(group===\"pol\") return \"Cargo p\u00fablico\"; if(group===\"aso\") return \"Asociaci\u00f3n\"; return \"\"; }\n  \/* Versi\u00f3n corta del cargo para los pills compactos (texto antes de \" \u00b7 \" o \" (\") *\/\n  function shortRole(group,role){ const full=roleLabel(group,role); if(!full) return \"\"; return full.split(\/\\s\u00b7\\s|\\s*\\(\/)[0].trim(); }\n  const STOP = new Set(\"de la el en y a los las del un una que con por para se su sus al lo como mas m\u00e1s o e u ni entre sobre sin tras este esta estos estas ese esa eso son ha han hay no si s\u00ed ya muy tambi\u00e9n tan tanto cada uno dos tres esta est\u00e1n fue ser es las les le nos seg\u00fan hacia desde durante mientras cuando donde quien cual cuales todo toda todos todas otro otra otros otras mismo misma pero porque aunque sino ante bajo cabe contra hasta para pues c\u00f3mo qu\u00e9 cu\u00e1l qui\u00e9n d\u00f3nde m\u00e1s menos hace hacen tras ello esto eso aqu\u00ed all\u00ed han haber sido sera ser\u00e1\".split(\/\\s+\/));\n  function topConcepts(x,n){\n    const parts=[x.summary||\"\"]; (x.top_posts||[]).forEach(p=>parts.push(p.text||\"\"));\n    if(x.pos){ [\"pol\",\"aso\"].forEach(g=>{ if(x.pos[g]&&x.pos[g].stance) parts.push(x.pos[g].stance); }); }\n    const freq=Object.create(null);\n    (parts.join(\" \").toLowerCase().match(\/[a-z\u00e1\u00e9\u00ed\u00f3\u00fa\u00f1\u00fc]{4,}\/gi)||[]).forEach(w=>{ if(STOP.has(w)) return; freq[w]=(freq[w]||0)+1; });\n    return Object.keys(freq).sort((a,b)=>freq[b]-freq[a]).filter(w=>freq[w]>1).slice(0,n)\n      .map(w=>w.charAt(0).toUpperCase()+w.slice(1));\n  }\n  function renderTopEntities(){\n    const box=document.getElementById(\"topents\"); if(!box) return;\n    const f=st.filter, subs=subsInView(), agg=Object.create(null);\n    subs.forEach(s=>{ subEntities(s).forEach(e=>{\n      if(!e||!e.name) return;\n      if(f!==\"todos\" && e.group && e.group!==f) return;\n      const c=+e.count||0; if(c<=0) return;\n      const a=agg[e.name]||(agg[e.name]={name:e.name,count:0,group:e.group||\"\",role:e.role||\"\"});\n      a.count+=c; if(!a.role && e.role) a.role=e.role; if(!a.group && e.group) a.group=e.group;\n    }); });\n    const top=Object.keys(agg).map(k=>agg[k]).sort((a,b)=>b.count-a.count).slice(0,4);\n    if(!top.length){ box.hidden=true; box.innerHTML=\"\"; return; }\n    box.hidden=false;\n    const themed = st.theme ? tint(st.theme.color,0.45) : null;\n    const rkStyle = themed ? ' style=\"background:'+themed.css+';color:'+themed.fg+'\"' : '';\n    box.innerHTML='<p class=\"k\">Stakeholders m\u00e1s activos<\/p><ol>'+\n      top.map((e,i)=>{ const r=shortRole(e.group,e.role), rFull=roleLabel(e.group,e.role);\n        return '<li class=\"ent-row\" data-ent=\"'+esc(e.name)+'\" role=\"button\" tabindex=\"0\" title=\"'+esc(e.name)+(rFull?' \u2014 '+esc(rFull):'')+'\"><span class=\"rk\"'+rkStyle+'>'+(i+1)+'<\/span><span class=\"ent\"><span class=\"nm\">'+esc(e.name)+'<\/span>'+\n          (r?'<span class=\"role\">'+esc(r)+'<\/span>':'')+'<\/span>'+\n          '<span class=\"ct\" title=\"'+e.count.toLocaleString(\"es-ES\")+' menciones\">('+e.count.toLocaleString(\"es-ES\")+')<\/span><\/li>'; }).join(\"\")+'<\/ol>';\n  }\n  function renderChips(){\n    const nav=$(\"#tchips\");\n    nav.innerHTML='<span class=\"flabel\">Temas<\/span>'+\n      '<button class=\"tchip\" data-amb=\"todos\" style=\"border-color:var(--line);color:var(--ink)\">Todos<\/button>'+\n      THEMES.map(t=>'<button class=\"tchip\" data-amb=\"'+t.id+'\" style=\"border-color:var(--line);color:var(--ink)\">'+esc(t.label)+'<\/button>').join(\"\");\n    Array.prototype.forEach.call(nav.querySelectorAll(\"button\"),b=>{ b.onclick=()=>{ const id=b.getAttribute(\"data-amb\"); if(id===\"todos\")goLevel1(); else goLevel2(THEMES.filter(t=>t.id===id)[0]); }; });\n    updateChips();\n  }\n  function updateChips(){\n    const cur=st.theme?st.theme.id:\"todos\";\n    Array.prototype.forEach.call(document.querySelectorAll(\"#tchips .tchip\"),b=>{\n      const id=b.getAttribute(\"data-amb\"),on=id===cur;\n      if(id===\"todos\"){ b.style.background=on?\"#1F2547\":\"#fff\"; b.style.color=on?\"#fff\":\"var(--ink)\"; b.style.borderColor=on?\"#1F2547\":\"var(--line)\"; }\n      else{ const t=THEMES.filter(x=>x.id===id)[0]; if(t){ b.style.background=on?t.color:\"#fff\"; b.style.color=on?fgFor(t.color):\"var(--ink)\"; b.style.borderColor=on?t.color:\"var(--line)\"; } }\n    });\n  }\n  function render(){\n    if(!THEMES.length){ canvas.innerHTML='<p class=\"wt-empty\">Sin datos.<\/p>'; return; }\n    renderMetrics(); renderTopEntities(); updateChips();\n    if(st.level<3){ detail.hidden=true; canvas.style.display=\"\"; }\n    if(st.level===1){\n      intro.hidden=true; scope.textContent=\"\u00c1mbitos por volumen de conversaci\u00f3n \u00b7 \"+GROUPS[st.filter].label;\n      build(canvas,THEMES.map(t=>{ const v=themeVol(t,st.filter); return {value:v,label:t.label,color:t.color,fg:fgFor(t.color),num:v+\" menciones \u00b7 \"+(t.sub||[]).length+\" temas\",onclick:()=>goLevel2(t)}; }));\n    } else if(st.level===2){\n      intro.hidden=true; intro.textContent=\"\";\n      scope.textContent=\"Temas por volumen de conversaci\u00f3n \u00b7 \"+GROUPS[st.filter].label;\n      const vols=st.theme.sub.map(x=>vol(x,st.filter)),mn=Math.min.apply(null,vols),mx=Math.max.apply(null,vols);\n      build(canvas,st.theme.sub.map(x=>{ const v=vol(x,st.filter); let f=mx>mn?(v-mn)\/(mx-mn):1; f=0.25+0.75*f; const tt=tint(st.theme.color,f); return {value:Math.max(v,0.5),label:x.label,color:tt.css,fg:tt.fg,num:v+\" menciones\",onclick:()=>goLevel3(x)}; }));\n    } else renderPos();\n  }\n  function renderPos(){\n    intro.hidden=true; canvas.style.display=\"none\"; detail.hidden=false; detail.className=\"pos\";\n    const t=st.theme,x=st.sub,v=vol(x,st.filter),sc=SENTC[x.sent]||SENTC.mixto;\n    scope.textContent=\"\";\n    const groups=st.filter===\"todos\"?[\"pol\",\"aso\"]:[st.filter];\n    \/\/ Cabecera: bot\u00f3n volver a la izquierda + t\u00edtulo del subtema; breadcrumb peque\u00f1o debajo\n    const head='<div class=\"phead\"><button class=\"back\" id=\"back\">\u2190 Volver a '+esc(t.label)+'<\/button>'+\n      '<h3 class=\"ptitle\">'+esc(x.label)+'<\/h3><\/div>'+\n      '<p class=\"pcrumb\">'+esc(GROUPS[st.filter].label+\" \u00b7 \"+t.label+\" \u00b7 \"+x.label)+'<\/p>';\n    \/\/ Descripci\u00f3n del tema (dos columnas: descripci\u00f3n | conceptos)\n    let desc='<div class=\"pdesc\"><div class=\"pdesc-col\"><h4 class=\"pdesc-h\">Descripci\u00f3n del tema<\/h4>'+\n      '<p class=\"psummary\">'+esc(x.summary||\"Sin descripci\u00f3n disponible para este tema.\")+'<\/p><\/div>';\n    const concepts=topConcepts(x,8);\n    if(concepts.length){ desc+='<div class=\"pdesc-col pconcepts\"><span class=\"pconcepts-h\">Conceptos m\u00e1s repetidos<\/span><div class=\"pconcepts-row\">'+concepts.map(c=>'<span class=\"pconcept\">'+esc(c)+'<\/span>').join(\"\")+'<\/div><\/div>'; }\n    desc+='<\/div>';\n    \/\/ Columna izquierda: qu\u00e9 dicen pol\u00edticos y asociaciones\n    let left='<div class=\"col-h\">Qu\u00e9 dicen \u00b7 '+v+' menciones<\/div>';\n    groups.forEach(g=>{ const p=(x.pos&&x.pos[g])||{stance:\"\",orgs:[]};\n      left+='<div class=\"pgroup\" style=\"--gc:'+GROUPS[g].color+'\"><h3><span class=\"gd\" style=\"background:'+GROUPS[g].color+'\"><\/span>'+GROUPS[g].label+' \u00b7 '+(x[g]||0)+' menciones<\/h3>'+\n        '<p class=\"pstance\">'+esc(p.stance||\"\u2014\")+'<\/p><div class=\"orgs\">'+(p.orgs||[]).map(o=>'<span class=\"org\">'+esc(o)+'<\/span>').join(\"\")+'<\/div><\/div>'; });\n    \/\/ Columna derecha: posts destacados (hasta 6, mismo alto, recorte + hover, bot\u00f3n Ver m\u00e1s)\n    const posts=(x.top_posts||[]).slice(0,6);\n    let right='<div class=\"col-h\">Posts m\u00e1s destacados<\/div>';\n    if(posts.length){\n      right+='<div class=\"tops\">'+\n        posts.map(p=>{ const dot=sentColor(p.sent||x.sent); const r=shortRole(p.type,p.role), rFull=roleLabel(p.type,p.role); const full=p.text||\"\"; const link=p.url?'<a class=\"top-link\" href=\"'+esc(p.url)+'\" target=\"_blank\" rel=\"noopener\">ver \u2197<\/a>':'';\n          return '<div class=\"top\" title=\"'+esc(full)+'\"><div class=\"top-head\"><span class=\"top-dot\" title=\"'+esc((SENTC[p.sent||x.sent]||SENTC.mixto).l)+'\" style=\"background:'+dot+'\"><\/span>'+\n            '<strong>'+esc(p.author||\"\u2014\")+'<\/strong>'+(r?'<span class=\"top-role\" title=\"'+esc(rFull)+'\">'+esc(r)+'<\/span>':'')+'<span class=\"top-net\" title=\"'+esc(NET[p.network]||p.network||\"\")+'\">'+(netIcon(p.network)||esc(NET[p.network]||p.network||\"\"))+'<\/span>'+\n            '<span class=\"top-impact\">'+((p.impact||0).toLocaleString(\"es-ES\"))+' impacto<\/span>'+link+'<\/div><div class=\"top-text\">'+esc(full)+'<\/div><\/div>'; }).join(\"\")+'<\/div>'+\n        '<button class=\"ver-mas\" id=\"vermas\" type=\"button\">Ver m\u00e1s<\/button>';\n    } else {\n      right+='<p class=\"wt-empty\" style=\"font-size:14px;color:var(--muted);margin-top:12px\">Sin posts destacados para este tema.<\/p>';\n    }\n    detail.innerHTML=head+desc+'<div class=\"pos-grid\"><div class=\"pos-left\">'+left+'<\/div><div class=\"pos-right\">'+right+'<\/div><\/div>';\n    document.getElementById(\"back\").onclick=()=>goLevel2(t);\n    const vm=document.getElementById(\"vermas\"); if(vm) vm.onclick=()=>showContactPopup(x.label);\n    Array.prototype.forEach.call(detail.querySelectorAll(\".pconcept\"),el=>{ el.setAttribute(\"role\",\"button\"); el.setAttribute(\"tabindex\",\"0\"); el.onclick=()=>showContactPopup(el.textContent); el.onkeydown=ev=>{ if(ev.key===\"Enter\"||ev.key===\" \"){ ev.preventDefault(); showContactPopup(el.textContent); } }; });\n    window.scrollTo({top:0,behavior:\"smooth\"});\n  }\n  function goLevel1(){ st.level=1; st.theme=null; st.sub=null; render(); }\n  function goLevel2(t){ st.level=2; st.theme=t; st.sub=null; render(); }\n  function goLevel3(x){ st.level=3; st.sub=x; render(); }\n\n  Array.prototype.forEach.call(document.querySelectorAll(\".wt-tree .schip\"),c=>{\n    c.onclick=()=>{ st.filter=c.getAttribute(\"data-f\");\n      Array.prototype.forEach.call(document.querySelectorAll(\".wt-tree .schip\"),b=>{ const on=b===c;\n        b.style.background=on?\"#1F2547\":\"#fff\"; b.style.color=on?\"#fff\":\"var(--ink)\"; b.style.borderColor=on?\"#1F2547\":\"var(--line)\";\n        const d=b.querySelector(\".cdot\"); if(d)d.style.background=on?\"#fff\":\"#1F2547\"; });\n      render(); };\n  });\n  const _def = document.querySelector('.wt-tree .schip[data-f=\"todos\"]');\n  if (_def) _def.click();\n\n  (function(){\n    const root=document.querySelector(\".wt-tree\"); if(!root) return;\n    function setHot(g,on){ Array.prototype.forEach.call(root.querySelectorAll('.split [data-g]'),el=>{ if(el.getAttribute('data-g')===g) el.classList.toggle('hot',on); }); }\n    root.addEventListener('mouseover',e=>{ const t=e.target.closest&&e.target.closest('.split [data-g]'); if(t)setHot(t.getAttribute('data-g'),true); });\n    root.addEventListener('mouseout', e=>{ const t=e.target.closest&&e.target.closest('.split [data-g]'); if(t)setHot(t.getAttribute('data-g'),false); });\n  })();\n\n  \/* Popup \"Contacta con Vinces\" al pulsar una cuenta activa *\/\n  function ensureModal(){\n    let m=document.getElementById(\"watsModal\"); if(m) return m;\n    m=document.createElement(\"div\"); m.className=\"wt-modal\"; m.id=\"watsModal\"; m.setAttribute(\"role\",\"dialog\"); m.setAttribute(\"aria-modal\",\"true\"); m.setAttribute(\"aria-hidden\",\"true\");\n    m.innerHTML='<div class=\"box\"><h4>Contacta con Vinces<\/h4><p id=\"watsModalMsg\"><\/p><div class=\"acts\"><a class=\"cta\" href=\"https:\/\/vincesconsulting.com\/pt-pt\/contacto\/\" target=\"_blank\" rel=\"noopener\">Solicitar demo<\/a><button class=\"x\" type=\"button\">Cerrar<\/button><\/div><\/div>';\n    document.body.appendChild(m);\n    m.addEventListener(\"click\",e=>{ if(e.target===m||e.target.classList.contains(\"x\")) closeModal(); });\n    document.addEventListener(\"keydown\",e=>{ if(e.key===\"Escape\") closeModal(); });\n    return m;\n  }\n  function closeModal(){ const m=document.getElementById(\"watsModal\"); if(m){ m.classList.remove(\"open\"); m.setAttribute(\"aria-hidden\",\"true\"); } }\n  function showContactPopup(name){\n    const m=ensureModal();\n    m.querySelector(\"#watsModalMsg\").innerHTML='Para obtener m\u00e1s informaci\u00f3n o una demo de tu informe, contacta con Vinces.';\n    m.classList.add(\"open\"); m.setAttribute(\"aria-hidden\",\"false\");\n  }\n  (function(){\n    const tEl=document.getElementById(\"topents\"); if(!tEl) return;\n    function hit(e){ return e.target.closest&&e.target.closest(\"li.ent-row[data-ent]\"); }\n    tEl.addEventListener(\"click\",e=>{ const li=hit(e); if(li) showContactPopup(li.getAttribute(\"data-ent\")); });\n    tEl.addEventListener(\"keydown\",e=>{ if(e.key!==\"Enter\"&&e.key!==\" \") return; const li=hit(e); if(li){ e.preventDefault(); showContactPopup(li.getAttribute(\"data-ent\")); } });\n  })();\n  \/* CTA banner siempre visible bajo el gr\u00e1fico \u2192 modal de contacto *\/\n  (function(){\n    const b=document.getElementById(\"wtCtaBtn\"); if(b) b.addEventListener(\"click\",()=>showContactPopup());\n  })();\n\n  function load() {\n    loadDashboardData(DEFAULT_API_URL, data => {\n      renderSeoTables(data);\n      updateMeta(data);\n      setUpdatedPill(data, null);\n      const rep = data.report;\n      if (!rep || !rep.themes || !rep.themes.length) {\n        THEMES = [];\n        if (canvas) canvas.innerHTML = '<p class=\"wt-empty\">Sin informe tem\u00e1tico disponible todav\u00eda.<\/p>';\n        return;\n      }\n      THEMES = rep.themes;\n      softenThemes();\n      if (st.theme) { const nt = THEMES.filter(t => t.id === st.theme.id)[0]; st.theme = nt || null; if (!nt) { st.level = 1; st.sub = null; } }\n      renderChips(); render();\n    }, (msg, kind) => {\n      setUpdatedPill(null, kind === \"network\" ? \"Error de conexi\u00f3n\" : kind === \"http\" ? \"Error HTTP\" : \"Error\");\n      if (canvas) canvas.innerHTML = '<p class=\"wt-empty\" style=\"color:#C0392B\">No se pudieron cargar los datos.<\/p>';\n    });\n  }\n\n  const absUrl = `${window.location.protocol}\/\/${window.location.host}\/api\/dashboard-publico\/wats\/`;\n  bindDownloadExternalHtml(absUrl);\n  load();\n  setInterval(load, REFRESH_MS);\n})();\n<\/script>\n\n\n\n<script>\n(function(){\n  function wrapHeroRight(){\n    return; \/* hero ya estructurado con .vc-hero-actions + rueda *\/\n    var pill = document.getElementById('updated-pill');\n    var cta = document.querySelector('.vc-hero-cta');\n    if (!pill || !cta || cta.parentNode.classList.contains('vc-hero-right')) return;\n    var wrap = document.createElement('div');\n    wrap.className = 'vc-hero-right';\n    cta.parentNode.insertBefore(wrap, cta);\n    wrap.appendChild(pill);\n    wrap.appendChild(cta);\n  }\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', wrapHeroRight);\n  } else {\n    wrapHeroRight();\n  }\n})();\n<\/script>\n\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>WATS: Temas de conversa dos partidos pol\u00edticos \u00b7 Intelig\u00eancia social \u00b7 Vinces WATS \u00b7 Intelig\u00eancia social O que dizem as pessoas que te interessam? WATS significa \u00abWhat Are They Saying?\u00bb (O que est\u00e3o a dizer?): o que dizem as associa\u00e7\u00f5es, os formadores de opini\u00e3o, os decisores e outros intervenientes-chave sobre os temas que te preocupam. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":4956,"parent":11884,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-11960","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/vincesconsulting.com\/pt-pt\/wp-json\/wp\/v2\/pages\/11960","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vincesconsulting.com\/pt-pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/vincesconsulting.com\/pt-pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/vincesconsulting.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vincesconsulting.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=11960"}],"version-history":[{"count":0,"href":"https:\/\/vincesconsulting.com\/pt-pt\/wp-json\/wp\/v2\/pages\/11960\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/vincesconsulting.com\/pt-pt\/wp-json\/wp\/v2\/pages\/11884"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vincesconsulting.com\/pt-pt\/wp-json\/wp\/v2\/media\/4956"}],"wp:attachment":[{"href":"https:\/\/vincesconsulting.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=11960"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}