{"id":13122,"date":"2026-06-07T18:08:41","date_gmt":"2026-06-07T18:08:41","guid":{"rendered":"https:\/\/tasando.com\/propiedades\/?page_id=13122"},"modified":"2026-09-01T13:15:24","modified_gmt":"2026-09-01T13:15:24","slug":"fondos-mutuos","status":"publish","type":"page","link":"https:\/\/tasando.com\/propiedades\/fondos-mutuos\/","title":{"rendered":"Fondos Mutuos"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"13122\" class=\"elementor elementor-13122\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c8cef7e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c8cef7e\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c6f1850\" data-id=\"c6f1850\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-42517ba elementor-widget elementor-widget-html\" data-id=\"42517ba\" 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<!-- =========================================================\r\n     TASANDO.COM | CSS MAESTRO DE ALINEACI\u00d3N\r\n     Pegar UNA SOLA VEZ al inicio de la p\u00e1gina \/fondos-mutuos\/\r\n     En un widget HTML nuevo, antes de todos los bloques.\r\n     ========================================================= -->\r\n\r\n<style>\r\n  :root {\r\n    --tasando-page-width: min(1240px, calc(100vw - 120px));\r\n    --tasando-page-width-tablet: calc(100vw - 48px);\r\n    --tasando-page-width-mobile: calc(100vw - 24px);\r\n  }\r\n\r\n  \/* =========================================================\r\n     1) LIBERA CONTENEDORES DE ELEMENTOR\r\n     ========================================================= *\/\r\n\r\n  body .elementor-section:has(#tasando-fondos-top12-v1),\r\n  body .elementor-section:has(#tasando-fm-intro),\r\n  body .elementor-section:has(#tasando-matriz-fm-acc),\r\n  body .elementor-section:has(#tasando-ranking-fm-ret20),\r\n  body .elementor-section:has(#tasando-diccionario-fm-ejecutivo),\r\n  body .elementor-section:has(#tasando-footer-custom),\r\n\r\n  body .elementor-top-section:has(#tasando-fondos-top12-v1),\r\n  body .elementor-top-section:has(#tasando-fm-intro),\r\n  body .elementor-top-section:has(#tasando-matriz-fm-acc),\r\n  body .elementor-top-section:has(#tasando-ranking-fm-ret20),\r\n  body .elementor-top-section:has(#tasando-diccionario-fm-ejecutivo),\r\n  body .elementor-top-section:has(#tasando-footer-custom),\r\n\r\n  body .elementor-container:has(#tasando-fondos-top12-v1),\r\n  body .elementor-container:has(#tasando-fm-intro),\r\n  body .elementor-container:has(#tasando-matriz-fm-acc),\r\n  body .elementor-container:has(#tasando-ranking-fm-ret20),\r\n  body .elementor-container:has(#tasando-diccionario-fm-ejecutivo),\r\n  body .elementor-container:has(#tasando-footer-custom),\r\n\r\n  body .elementor-column:has(#tasando-fondos-top12-v1),\r\n  body .elementor-column:has(#tasando-fm-intro),\r\n  body .elementor-column:has(#tasando-matriz-fm-acc),\r\n  body .elementor-column:has(#tasando-ranking-fm-ret20),\r\n  body .elementor-column:has(#tasando-diccionario-fm-ejecutivo),\r\n  body .elementor-column:has(#tasando-footer-custom),\r\n\r\n  body .elementor-widget-wrap:has(#tasando-fondos-top12-v1),\r\n  body .elementor-widget-wrap:has(#tasando-fm-intro),\r\n  body .elementor-widget-wrap:has(#tasando-matriz-fm-acc),\r\n  body .elementor-widget-wrap:has(#tasando-ranking-fm-ret20),\r\n  body .elementor-widget-wrap:has(#tasando-diccionario-fm-ejecutivo),\r\n  body .elementor-widget-wrap:has(#tasando-footer-custom),\r\n\r\n  body .elementor-widget-html:has(#tasando-fondos-top12-v1),\r\n  body .elementor-widget-html:has(#tasando-fm-intro),\r\n  body .elementor-widget-html:has(#tasando-matriz-fm-acc),\r\n  body .elementor-widget-html:has(#tasando-ranking-fm-ret20),\r\n  body .elementor-widget-html:has(#tasando-diccionario-fm-ejecutivo),\r\n  body .elementor-widget-html:has(#tasando-footer-custom),\r\n\r\n  body .elementor-widget-html:has(#tasando-fondos-top12-v1) > .elementor-widget-container,\r\n  body .elementor-widget-html:has(#tasando-fm-intro) > .elementor-widget-container,\r\n  body .elementor-widget-html:has(#tasando-matriz-fm-acc) > .elementor-widget-container,\r\n  body .elementor-widget-html:has(#tasando-ranking-fm-ret20) > .elementor-widget-container,\r\n  body .elementor-widget-html:has(#tasando-diccionario-fm-ejecutivo) > .elementor-widget-container,\r\n  body .elementor-widget-html:has(#tasando-footer-custom) > .elementor-widget-container,\r\n\r\n  body .e-con:has(#tasando-fondos-top12-v1),\r\n  body .e-con:has(#tasando-fm-intro),\r\n  body .e-con:has(#tasando-matriz-fm-acc),\r\n  body .e-con:has(#tasando-ranking-fm-ret20),\r\n  body .e-con:has(#tasando-diccionario-fm-ejecutivo),\r\n  body .e-con:has(#tasando-footer-custom),\r\n\r\n  body .e-con-inner:has(#tasando-fondos-top12-v1),\r\n  body .e-con-inner:has(#tasando-fm-intro),\r\n  body .e-con-inner:has(#tasando-matriz-fm-acc),\r\n  body .e-con-inner:has(#tasando-ranking-fm-ret20),\r\n  body .e-con-inner:has(#tasando-diccionario-fm-ejecutivo),\r\n  body .e-con-inner:has(#tasando-footer-custom) {\r\n    width: 100% !important;\r\n    max-width: none !important;\r\n    min-width: 0 !important;\r\n    margin-left: auto !important;\r\n    margin-right: auto !important;\r\n    padding-left: 0 !important;\r\n    padding-right: 0 !important;\r\n    left: auto !important;\r\n    right: auto !important;\r\n    transform: none !important;\r\n    overflow: visible !important;\r\n    float: none !important;\r\n    clear: both !important;\r\n    flex: 0 0 100% !important;\r\n  }\r\n\r\n  \/* =========================================================\r\n     2) NORMALIZA SECCIONES PRINCIPALES\r\n     ========================================================= *\/\r\n\r\n  #tasando-fondos-top12-v1,\r\n  #tasando-fm-intro,\r\n  #tasando-matriz-fm-acc,\r\n  #tasando-ranking-fm-ret20,\r\n  #tasando-diccionario-fm-ejecutivo,\r\n  #tasando-footer-custom {\r\n    display: block !important;\r\n    width: 100% !important;\r\n    max-width: 100% !important;\r\n    min-width: 0 !important;\r\n    margin-left: auto !important;\r\n    margin-right: auto !important;\r\n    padding-left: 0 !important;\r\n    padding-right: 0 !important;\r\n    left: auto !important;\r\n    right: auto !important;\r\n    transform: none !important;\r\n    float: none !important;\r\n    clear: both !important;\r\n    overflow: visible !important;\r\n    box-sizing: border-box !important;\r\n  }\r\n\r\n  #tasando-fondos-top12-v1 *,\r\n  #tasando-fm-intro *,\r\n  #tasando-matriz-fm-acc *,\r\n  #tasando-ranking-fm-ret20 *,\r\n  #tasando-diccionario-fm-ejecutivo *,\r\n  #tasando-footer-custom * {\r\n    box-sizing: border-box !important;\r\n  }\r\n\r\n  \/* =========================================================\r\n     3) MISMO ANCHO PARA TODOS LOS RECUADROS\r\n     ========================================================= *\/\r\n\r\n  #tasando-fondos-top12-v1 .tft-panel,\r\n  #tasando-fondos-top12-v1 .tf-panel,\r\n  #tasando-fondos-top12-v1 .tf-wrap,\r\n\r\n  #tasando-fm-intro .tfi-panel,\r\n\r\n  #tasando-matriz-fm-acc .tm-panel,\r\n\r\n  #tasando-ranking-fm-ret20 .tr-panel,\r\n\r\n  #tasando-diccionario-fm-ejecutivo .td-wrap,\r\n\r\n  #tasando-footer-custom .tf-wrap {\r\n    width: var(--tasando-page-width) !important;\r\n    max-width: var(--tasando-page-width) !important;\r\n    min-width: 0 !important;\r\n    margin-left: auto !important;\r\n    margin-right: auto !important;\r\n    left: auto !important;\r\n    right: auto !important;\r\n    transform: none !important;\r\n    float: none !important;\r\n    clear: both !important;\r\n  }\r\n\r\n  \/* =========================================================\r\n     4) PROH\u00cdBE QUE UN BLOQUE SE SALGA A 100VW\r\n     ========================================================= *\/\r\n\r\n  #tasando-fondos-top12-v1,\r\n  #tasando-fm-intro,\r\n  #tasando-matriz-fm-acc,\r\n  #tasando-ranking-fm-ret20,\r\n  #tasando-diccionario-fm-ejecutivo,\r\n  #tasando-footer-custom {\r\n    width: 100% !important;\r\n    max-width: 100% !important;\r\n    margin-left: auto !important;\r\n    margin-right: auto !important;\r\n  }\r\n\r\n  #tasando-fondos-top12-v1[style],\r\n  #tasando-fm-intro[style],\r\n  #tasando-matriz-fm-acc[style],\r\n  #tasando-ranking-fm-ret20[style],\r\n  #tasando-diccionario-fm-ejecutivo[style],\r\n  #tasando-footer-custom[style],\r\n\r\n  #tasando-fondos-top12-v1 .tft-panel[style],\r\n  #tasando-fondos-top12-v1 .tf-panel[style],\r\n  #tasando-fm-intro .tfi-panel[style],\r\n  #tasando-matriz-fm-acc .tm-panel[style],\r\n  #tasando-ranking-fm-ret20 .tr-panel[style],\r\n  #tasando-diccionario-fm-ejecutivo .td-wrap[style],\r\n  #tasando-footer-custom .tf-wrap[style] {\r\n    transform: none !important;\r\n  }\r\n\r\n  \/* =========================================================\r\n     5) ESPACIADO VERTICAL ESTABLE ENTRE BLOQUES\r\n     ========================================================= *\/\r\n\r\n  #tasando-fondos-top12-v1 {\r\n    margin-bottom: 34px !important;\r\n  }\r\n\r\n  #tasando-fm-intro {\r\n    margin-top: 34px !important;\r\n    margin-bottom: 34px !important;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc {\r\n    margin-top: 0 !important;\r\n    margin-bottom: 34px !important;\r\n  }\r\n\r\n  #tasando-ranking-fm-ret20 {\r\n    margin-top: 0 !important;\r\n    margin-bottom: 34px !important;\r\n  }\r\n\r\n  #tasando-diccionario-fm-ejecutivo {\r\n    margin-top: 0 !important;\r\n    margin-bottom: 34px !important;\r\n  }\r\n\r\n  #tasando-footer-custom {\r\n    margin-top: 0 !important;\r\n    margin-bottom: 0 !important;\r\n  }\r\n\r\n  \/* =========================================================\r\n     6) RESPONSIVE\r\n     ========================================================= *\/\r\n\r\n  @media (max-width: 1200px) {\r\n    #tasando-fondos-top12-v1 .tft-panel,\r\n    #tasando-fondos-top12-v1 .tf-panel,\r\n    #tasando-fondos-top12-v1 .tf-wrap,\r\n\r\n    #tasando-fm-intro .tfi-panel,\r\n\r\n    #tasando-matriz-fm-acc .tm-panel,\r\n\r\n    #tasando-ranking-fm-ret20 .tr-panel,\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-wrap,\r\n\r\n    #tasando-footer-custom .tf-wrap {\r\n      width: var(--tasando-page-width-tablet) !important;\r\n      max-width: var(--tasando-page-width-tablet) !important;\r\n      margin-left: auto !important;\r\n      margin-right: auto !important;\r\n      transform: none !important;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 700px) {\r\n    #tasando-fondos-top12-v1 .tft-panel,\r\n    #tasando-fondos-top12-v1 .tf-panel,\r\n    #tasando-fondos-top12-v1 .tf-wrap,\r\n\r\n    #tasando-fm-intro .tfi-panel,\r\n\r\n    #tasando-matriz-fm-acc .tm-panel,\r\n\r\n    #tasando-ranking-fm-ret20 .tr-panel,\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-wrap,\r\n\r\n    #tasando-footer-custom .tf-wrap {\r\n      width: var(--tasando-page-width-mobile) !important;\r\n      max-width: var(--tasando-page-width-mobile) !important;\r\n      margin-left: auto !important;\r\n      margin-right: auto !important;\r\n      transform: none !important;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1,\r\n    #tasando-fm-intro,\r\n    #tasando-matriz-fm-acc,\r\n    #tasando-ranking-fm-ret20,\r\n    #tasando-diccionario-fm-ejecutivo,\r\n    #tasando-footer-custom {\r\n      margin-bottom: 26px !important;\r\n    }\r\n  }\r\n  \r\n  \/* =========================================================\r\n   AJUSTE COMPACTO BLOQUE AZUL - INTRO FONDOS MUTUOS\r\n   Reduce padding interno y espacios vac\u00edos\r\n   ========================================================= *\/\r\n\r\n#tasando-fm-intro {\r\n  margin-top: 24px !important;\r\n  margin-bottom: 24px !important;\r\n}\r\n\r\n#tasando-fm-intro .tfi-panel {\r\n  padding: 22px 26px !important;\r\n  min-height: auto !important;\r\n}\r\n\r\n#tasando-fm-intro .tfi-grid {\r\n  gap: 18px !important;\r\n  align-items: center !important;\r\n}\r\n\r\n#tasando-fm-intro .tfi-kicker {\r\n  margin-bottom: 9px !important;\r\n  padding: 7px 12px !important;\r\n}\r\n\r\n#tasando-fm-intro h2 {\r\n  font-size: clamp(30px, 2.7vw, 42px) !important;\r\n  line-height: 1.03 !important;\r\n  margin-bottom: 0 !important;\r\n}\r\n\r\n#tasando-fm-intro .tfi-lead {\r\n  margin-top: 11px !important;\r\n  line-height: 1.52 !important;\r\n}\r\n\r\n#tasando-fm-intro .tfi-legend {\r\n  margin-top: 13px !important;\r\n}\r\n\r\n#tasando-fm-intro .tfi-chip {\r\n  padding: 7px 11px !important;\r\n}\r\n\r\n#tasando-fm-intro .tfi-cards {\r\n  gap: 9px !important;\r\n}\r\n\r\n#tasando-fm-intro .tfi-card {\r\n  padding: 11px 12px !important;\r\n  min-height: auto !important;\r\n}\r\n\r\n#tasando-fm-intro .tfi-icon {\r\n  width: 34px !important;\r\n  height: 34px !important;\r\n}\r\n\r\n\/* Notebook *\/\r\n@media (max-width: 1200px) {\r\n  #tasando-fm-intro .tfi-panel {\r\n    padding: 20px 24px !important;\r\n  }\r\n}\r\n\r\n\/* Celular *\/\r\n@media (max-width: 700px) {\r\n  #tasando-fm-intro {\r\n    margin-top: 18px !important;\r\n    margin-bottom: 20px !important;\r\n  }\r\n\r\n  #tasando-fm-intro .tfi-panel {\r\n    padding: 17px !important;\r\n  }\r\n\r\n  #tasando-fm-intro h2 {\r\n    font-size: 24px !important;\r\n    line-height: 1.08 !important;\r\n  }\r\n\r\n  #tasando-fm-intro .tfi-lead {\r\n    margin-top: 10px !important;\r\n    line-height: 1.48 !important;\r\n  }\r\n}\r\n  \r\n  \r\n  \r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d9b68fc elementor-widget elementor-widget-html\" data-id=\"d9b68fc\" 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<!-- =========================================================\r\n     TASANDO.COM | TOP 12 FONDOS MUTUOS\r\n     VERSI\u00d3N ALINEADA - MISMO EJE VISUAL DE P\u00c1GINA\r\n\r\n     Fuente:\r\n     WEB_COMENTARIOS \/ CLAVE = FONDOS_TOP12\r\n\r\n     Correcciones:\r\n     - Mantiene el mismo ancho madre que los dem\u00e1s bloques.\r\n     - Centrado horizontal real.\r\n     - No usa translateY.\r\n     - No se superpone con bloques posteriores.\r\n     - Mantiene separaci\u00f3n inferior normal.\r\n     - Compatible con Elementor.\r\n     ========================================================= -->\r\n\r\n<section id=\"tasando-fondos-top12-v1\">\r\n  <style>\r\n    #tasando-fondos-top12-v1 {\r\n      --tasando-page-width: min(1240px, calc(100vw - 120px));\r\n      --tf-max: var(--tasando-page-width);\r\n      --tf-blue: #102a54;\r\n      --tf-dark: #0f172a;\r\n      --tf-text: #1e293b;\r\n      --tf-muted: #64748b;\r\n      --tf-line: #cbd5e1;\r\n      --tf-green: #69be28;\r\n      --tf-pos-bg: #e8f7ec;\r\n      --tf-pos-text: #166534;\r\n      --tf-pos-dot: #16a34a;\r\n      --tf-neu-bg: #eef3f8;\r\n      --tf-neu-text: #475569;\r\n      --tf-neu-dot: #94a3b8;\r\n      --tf-neg-bg: #feecec;\r\n      --tf-neg-text: #991b1b;\r\n      --tf-neg-dot: #dc2626;\r\n\r\n      width: var(--tf-max) !important;\r\n      max-width: var(--tf-max) !important;\r\n\r\n      \/* Ajuste principal:\r\n         El bloque es el primer recuadro visible de la p\u00e1gina.\r\n         Por eso s\u00ed puede subir de forma controlada, sin afectar los bloques siguientes. *\/\r\n      margin: -58px auto 36px auto !important;\r\n\r\n      padding: 0 !important;\r\n      font-family: Arial, Helvetica, sans-serif;\r\n      color: var(--tf-text);\r\n      box-sizing: border-box;\r\n      display: block !important;\r\n      clear: both !important;\r\n      float: none !important;\r\n      position: relative !important;\r\n      z-index: 1 !important;\r\n      left: auto !important;\r\n      right: auto !important;\r\n      transform: none !important;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1,\r\n    #tasando-fondos-top12-v1 * {\r\n      box-sizing: border-box;\r\n    }\r\n\r\n    \/* =====================================================\r\n       ALINEACI\u00d3N MADRE\r\n       -----------------------------------------------------\r\n       Estos selectores liberan Elementor\/tema para que el\r\n       bloque pueda centrarse con el mismo ancho que los dem\u00e1s\r\n       bloques de \/fondos-mutuos\/.\r\n       ===================================================== *\/\r\n\r\n    body .entry-content:has(#tasando-fondos-top12-v1),\r\n    body .page-content:has(#tasando-fondos-top12-v1),\r\n    body .site-content:has(#tasando-fondos-top12-v1),\r\n    body .content-area:has(#tasando-fondos-top12-v1),\r\n    body .site-main:has(#tasando-fondos-top12-v1),\r\n    body .elementor:has(#tasando-fondos-top12-v1),\r\n    body .elementor-section:has(#tasando-fondos-top12-v1),\r\n    body .elementor-top-section:has(#tasando-fondos-top12-v1),\r\n    body .elementor-column:has(#tasando-fondos-top12-v1),\r\n    body .elementor-container:has(#tasando-fondos-top12-v1),\r\n    body .elementor-widget-wrap:has(#tasando-fondos-top12-v1),\r\n    body .e-con:has(#tasando-fondos-top12-v1),\r\n    body .e-con-inner:has(#tasando-fondos-top12-v1) {\r\n      width: 100% !important;\r\n      max-width: none !important;\r\n      overflow: visible !important;\r\n      margin-top: 0 !important;\r\n      padding-top: 0 !important;\r\n      padding-left: 0 !important;\r\n      padding-right: 0 !important;\r\n    }\r\n\r\n    body .elementor-widget-html:has(#tasando-fondos-top12-v1),\r\n    body .elementor-widget-html:has(#tasando-fondos-top12-v1) > .elementor-widget-container {\r\n      width: 100% !important;\r\n      max-width: none !important;\r\n      overflow: visible !important;\r\n      margin-top: 0 !important;\r\n      padding-top: 0 !important;\r\n      margin-left: auto !important;\r\n      margin-right: auto !important;\r\n      padding-left: 0 !important;\r\n      padding-right: 0 !important;\r\n      left: auto !important;\r\n      right: auto !important;\r\n      transform: none !important;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-panel {\r\n      width: 100%;\r\n      background:\r\n        radial-gradient(circle at top right, rgba(105,190,40,0.13), transparent 260px),\r\n        linear-gradient(180deg, #f8fafc 0%, #eef2f5 100%);\r\n      border: 1px solid var(--tf-line);\r\n      border-radius: 22px;\r\n      padding: 22px;\r\n      box-shadow: 0 16px 36px rgba(15, 23, 42, 0.10);\r\n      overflow: hidden;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-eyebrow {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      gap: 8px;\r\n      width: fit-content;\r\n      padding: 7px 12px;\r\n      border-radius: 999px;\r\n      background: #edf6e8;\r\n      border: 1px solid rgba(105,190,40,0.28);\r\n      color: var(--tf-blue);\r\n      font-size: 12px;\r\n      font-weight: 850;\r\n      margin-bottom: 10px;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-eyebrow::before {\r\n      content: \"\";\r\n      width: 7px;\r\n      height: 7px;\r\n      border-radius: 50%;\r\n      background: var(--tf-green);\r\n      box-shadow: 0 0 0 4px rgba(105,190,40,0.14);\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-title {\r\n      margin: 0 0 8px 0;\r\n      color: var(--tf-dark);\r\n      font-size: clamp(24px, 2.2vw, 34px);\r\n      line-height: 1.12;\r\n      font-weight: 900;\r\n      letter-spacing: -0.5px;\r\n      max-width: 980px;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-subtitle {\r\n      margin: 0 0 16px 0;\r\n      color: #475569;\r\n      font-size: 13px;\r\n      line-height: 1.45;\r\n      font-weight: 500;\r\n      max-width: 980px;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-meta {\r\n      display: grid;\r\n      grid-template-columns: 1fr 1fr 1.3fr;\r\n      gap: 10px;\r\n      margin: 0 0 18px 0;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-meta-card {\r\n      background: #ffffff;\r\n      border: 1px solid #d7dde6;\r\n      border-radius: 15px;\r\n      padding: 12px 14px;\r\n      box-shadow: 0 7px 18px rgba(15, 23, 42, 0.06);\r\n      min-height: 72px;\r\n      display: flex;\r\n      flex-direction: column;\r\n      justify-content: center;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-meta-label {\r\n      margin: 0 0 6px 0;\r\n      color: var(--tf-muted);\r\n      font-size: 10px;\r\n      line-height: 1;\r\n      font-weight: 850;\r\n      text-transform: uppercase;\r\n      letter-spacing: 0.04em;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-meta-value {\r\n      margin: 0;\r\n      color: var(--tf-dark);\r\n      font-size: 15px;\r\n      line-height: 1.18;\r\n      font-weight: 850;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-grid {\r\n      display: grid;\r\n      grid-template-columns: repeat(4, minmax(0, 1fr));\r\n      gap: 12px;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-card {\r\n      background: #ffffff;\r\n      border: 1px solid #d7dde6;\r\n      border-radius: 16px;\r\n      padding: 13px;\r\n      min-height: 248px;\r\n      box-shadow: 0 7px 18px rgba(15, 23, 42, 0.06);\r\n      display: grid;\r\n      grid-template-rows: auto auto auto auto;\r\n      gap: 10px;\r\n      overflow: hidden;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-topline {\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: space-between;\r\n      gap: 8px;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-rank {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      min-width: 30px;\r\n      height: 26px;\r\n      border-radius: 999px;\r\n      background: #0f172a;\r\n      color: #ffffff;\r\n      font-size: 11px;\r\n      font-weight: 900;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-family {\r\n      color: var(--tf-muted);\r\n      font-size: 10px;\r\n      line-height: 1;\r\n      font-weight: 850;\r\n      text-transform: uppercase;\r\n      letter-spacing: 0.04em;\r\n      text-align: right;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-code {\r\n      margin: 0;\r\n      color: var(--tf-dark);\r\n      font-size: 13px;\r\n      line-height: 1.2;\r\n      font-weight: 900;\r\n      letter-spacing: -0.1px;\r\n      min-height: 32px;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-segment {\r\n      margin: 3px 0 0 0;\r\n      color: #475569;\r\n      font-size: 10px;\r\n      line-height: 1.25;\r\n      font-weight: 650;\r\n      display: -webkit-box;\r\n      -webkit-line-clamp: 2;\r\n      -webkit-box-orient: vertical;\r\n      overflow: hidden;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-score-row {\r\n      display: grid;\r\n      grid-template-columns: 0.85fr 1.15fr;\r\n      gap: 8px;\r\n      align-items: stretch;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-score-box,\r\n    #tasando-fondos-top12-v1 .tf-rec-box {\r\n      border: 1px solid #e2e8f0;\r\n      border-radius: 13px;\r\n      padding: 10px;\r\n      min-height: 76px;\r\n      background: #f8fafc;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-box-label {\r\n      margin: 0 0 5px 0;\r\n      color: var(--tf-muted);\r\n      font-size: 9px;\r\n      font-weight: 850;\r\n      text-transform: uppercase;\r\n      letter-spacing: 0.04em;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-score {\r\n      margin: 0;\r\n      color: var(--tf-dark);\r\n      font-size: 26px;\r\n      line-height: 1;\r\n      font-weight: 950;\r\n      font-variant-numeric: tabular-nums;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-chip {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      gap: 6px;\r\n      width: fit-content;\r\n      max-width: 100%;\r\n      border-radius: 999px;\r\n      padding: 5px 9px;\r\n      font-size: 9.2px;\r\n      line-height: 1.15;\r\n      font-weight: 850;\r\n      border: 1px solid transparent;\r\n      white-space: normal;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-chip::before {\r\n      content: \"\";\r\n      width: 7px;\r\n      height: 7px;\r\n      border-radius: 50%;\r\n      display: inline-block;\r\n      flex: 0 0 7px;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-rec-pos .tf-chip {\r\n      background: var(--tf-pos-bg);\r\n      color: var(--tf-pos-text);\r\n      border-color: rgba(22,101,52,.18);\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-rec-pos .tf-chip::before {\r\n      background: var(--tf-pos-dot);\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-rec-neu .tf-chip {\r\n      background: var(--tf-neu-bg);\r\n      color: var(--tf-neu-text);\r\n      border-color: rgba(71,85,105,.18);\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-rec-neu .tf-chip::before {\r\n      background: var(--tf-neu-dot);\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-rec-neg .tf-chip {\r\n      background: var(--tf-neg-bg);\r\n      color: var(--tf-neg-text);\r\n      border-color: rgba(153,27,27,.18);\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-rec-neg .tf-chip::before {\r\n      background: var(--tf-neg-dot);\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-spark-wrap {\r\n      border: 1px solid #dbe5ef;\r\n      border-radius: 13px;\r\n      padding: 8px 9px;\r\n      background: linear-gradient(180deg, rgba(248,250,255,0.98) 0%, rgba(255,255,255,0.98) 100%);\r\n      min-height: 92px;\r\n      overflow: hidden;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-spark-head {\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: space-between;\r\n      gap: 6px;\r\n      margin: 0 0 5px 0;\r\n      line-height: 1;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-spark-period {\r\n      flex: 0 0 auto;\r\n      color: #475569;\r\n      font-size: 8.2px;\r\n      line-height: 1;\r\n      font-weight: 950;\r\n      letter-spacing: 0.02em;\r\n      text-transform: uppercase;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-spark-d {\r\n      color: var(--tf-green);\r\n      margin-left: 1px;\r\n      font-weight: 950;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-spark-range {\r\n      flex: 1 1 auto;\r\n      min-width: 0;\r\n      text-align: right;\r\n      color: #1f2937;\r\n      font-size: 7.2px;\r\n      line-height: 1;\r\n      font-weight: 850;\r\n      white-space: nowrap;\r\n      overflow: hidden;\r\n      text-overflow: clip;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-spark-svg {\r\n      width: 100%;\r\n      height: 58px;\r\n      display: block;\r\n      overflow: visible;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-spark-base-axis {\r\n      stroke: #334155;\r\n      stroke-width: 2.05;\r\n      opacity: 0.95;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-spark-axis {\r\n      stroke: #64748b;\r\n      stroke-width: 1.15;\r\n      opacity: 0.68;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-spark-area {\r\n      fill: rgba(37, 99, 235, 0.10);\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-spark-line {\r\n      fill: none;\r\n      stroke: #2563eb;\r\n      stroke-width: 3.1;\r\n      stroke-linecap: round;\r\n      stroke-linejoin: round;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-spark-dot {\r\n      fill: #1d4ed8;\r\n      stroke: #ffffff;\r\n      stroke-width: 1.4;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-metrics {\r\n      display: grid;\r\n      grid-template-columns: repeat(3, minmax(0, 1fr));\r\n      gap: 7px;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-metric {\r\n      background: #ffffff;\r\n      border: 1px solid #e2e8f0;\r\n      border-radius: 11px;\r\n      padding: 8px;\r\n      min-height: 52px;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-metric-label {\r\n      margin: 0 0 4px 0;\r\n      color: #64748b;\r\n      font-size: 8.5px;\r\n      line-height: 1;\r\n      font-weight: 850;\r\n      text-transform: uppercase;\r\n      letter-spacing: .03em;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-metric-value {\r\n      margin: 0;\r\n      color: #0f172a;\r\n      font-size: 11.5px;\r\n      line-height: 1.1;\r\n      font-weight: 850;\r\n      font-variant-numeric: tabular-nums;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-note {\r\n      margin: 16px 0 0 0;\r\n      padding: 12px 14px;\r\n      border-radius: 14px;\r\n      background: rgba(255,255,255,0.72);\r\n      border: 1px solid #d7dde6;\r\n      color: #475569;\r\n      font-size: 12px;\r\n      line-height: 1.45;\r\n      font-weight: 500;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-note strong {\r\n      color: var(--tf-blue);\r\n      font-weight: 900;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-loading,\r\n    #tasando-fondos-top12-v1 .tf-error {\r\n      padding: 18px;\r\n      border-radius: 13px;\r\n      background: #ffffff;\r\n      border: 1px solid #d7dde6;\r\n      color: var(--tf-muted);\r\n      font-size: 13px;\r\n      text-align: center;\r\n    }\r\n\r\n    #tasando-fondos-top12-v1 .tf-error {\r\n      background: #fff7ed;\r\n      border-color: #fed7aa;\r\n      color: #9a3412;\r\n      text-align: left;\r\n      line-height: 1.45;\r\n    }\r\n\r\n    @media (max-width: 980px) {\r\n      #tasando-fondos-top12-v1 {\r\n        width: calc(100vw - 48px) !important;\r\n        max-width: calc(100vw - 48px) !important;\r\n        margin: -44px auto 32px auto !important;\r\n      }\r\n\r\n      #tasando-fondos-top12-v1 .tf-grid {\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n      }\r\n\r\n      #tasando-fondos-top12-v1 .tf-meta {\r\n        grid-template-columns: 1fr;\r\n      }\r\n    }\r\n\r\n    @media (max-width: 560px) {\r\n      #tasando-fondos-top12-v1 {\r\n        width: 100% !important;\r\n        max-width: 100% !important;\r\n        margin: -24px auto 28px auto !important;\r\n        padding: 0 10px !important;\r\n      }\r\n\r\n      #tasando-fondos-top12-v1 .tf-panel {\r\n        padding: 16px;\r\n        border-radius: 18px;\r\n      }\r\n\r\n      #tasando-fondos-top12-v1 .tf-grid {\r\n        grid-template-columns: 1fr;\r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <div class=\"tf-panel\">\r\n    <div class=\"tf-eyebrow\">Ranking visual de fondos<\/div>\r\n    <h2 class=\"tf-title\" id=\"tfTopTitulo\">Top fondos mutuos<\/h2>\r\n    <p class=\"tf-subtitle\" id=\"tfTopSubtitulo\">Lectura visual generada desde el recomendador interno de fondos mutuos Tasando.com.<\/p>\r\n\r\n    <div class=\"tf-meta\">\r\n      <div class=\"tf-meta-card\">\r\n        <div class=\"tf-meta-label\">Fecha corrida<\/div>\r\n        <div class=\"tf-meta-value\" id=\"tfTopFecha\">cargando...<\/div>\r\n      <\/div>\r\n      <div class=\"tf-meta-card\">\r\n        <div class=\"tf-meta-label\">Categor\u00eda<\/div>\r\n        <div class=\"tf-meta-value\" id=\"tfTopCategoria\">cargando...<\/div>\r\n      <\/div>\r\n      <div class=\"tf-meta-card\">\r\n        <div class=\"tf-meta-label\">Criterio<\/div>\r\n        <div class=\"tf-meta-value\" id=\"tfTopCriterio\">cargando...<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"tfTopContenido\">\r\n      <div class=\"tf-loading\">Cargando Top fondos...<\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function () {\r\n      const root = document.getElementById(\"tasando-fondos-top12-v1\");\r\n      if (!root) return;\r\n\r\n      const endpoints = [\r\n        window.location.origin + \"\/propiedades\/wp-json\/tasando\/v1\/sheet\/comentario-mercados\",\r\n        window.location.origin + \"\/propiedades\/wp-json\/tasando\/v1\/sheet\/web-comentarios\",\r\n        window.location.origin + \"\/propiedades\/wp-json\/tasando\/v1\/sheet\/mercados-comentario\",\r\n        window.location.origin + \"\/wp-json\/tasando\/v1\/sheet\/comentario-mercados\",\r\n        window.location.origin + \"\/wp-json\/tasando\/v1\/sheet\/web-comentarios\",\r\n        window.location.origin + \"\/wp-json\/tasando\/v1\/sheet\/mercados-comentario\"\r\n      ];\r\n\r\n      const claveObjetivo = \"FONDOS_TOP12\";\r\n\r\n      const tituloBox = root.querySelector(\"#tfTopTitulo\");\r\n      const subtituloBox = root.querySelector(\"#tfTopSubtitulo\");\r\n      const fechaBox = root.querySelector(\"#tfTopFecha\");\r\n      const categoriaBox = root.querySelector(\"#tfTopCategoria\");\r\n      const criterioBox = root.querySelector(\"#tfTopCriterio\");\r\n      const contenidoBox = root.querySelector(\"#tfTopContenido\");\r\n\r\n      function limpiar(v) {\r\n        if (v === null || v === undefined) return \"\";\r\n        return String(v).replace(\/\\r\\n\/g, \"\\n\").replace(\/\\r\/g, \"\\n\").trim();\r\n      }\r\n\r\n      function esc(v) {\r\n        return limpiar(v)\r\n          .replace(\/&\/g, \"&amp;\")\r\n          .replace(\/<\/g, \"&lt;\")\r\n          .replace(\/>\/g, \"&gt;\")\r\n          .replace(\/\"\/g, \"&quot;\")\r\n          .replace(\/'\/g, \"&#039;\");\r\n      }\r\n\r\n      function norm(v) {\r\n        return limpiar(v)\r\n          .toUpperCase()\r\n          .normalize(\"NFD\")\r\n          .replace(\/[\\u0300-\\u036f]\/g, \"\")\r\n          .replace(\/[^A-Z0-9]\/g, \"\");\r\n      }\r\n\r\n      function buscarCol(headers, aliases) {\r\n        const h = headers.map(norm);\r\n        const a = aliases.map(norm);\r\n        for (let i = 0; i < h.length; i++) {\r\n          if (a.includes(h[i])) return i;\r\n        }\r\n        return -1;\r\n      }\r\n\r\n      function cell(row, idx) {\r\n        if (!Array.isArray(row)) return \"\";\r\n        if (idx < 0 || idx >= row.length) return \"\";\r\n        return limpiar(row[idx]);\r\n      }\r\n\r\n      function validarProxy(data) {\r\n        const real = data && data.data && data.data.headers ? data.data : data;\r\n        if (!real || real.ok !== true) {\r\n          throw new Error((real && real.error) ? real.error : \"Respuesta inv\u00e1lida del proxy.\");\r\n        }\r\n        const headers = Array.isArray(real.headers) ? real.headers : [];\r\n        const rows = Array.isArray(real.rows) ? real.rows : [];\r\n        if (!headers.length || !rows.length) throw new Error(\"El proxy no devolvi\u00f3 datos.\");\r\n        return { headers, rows };\r\n      }\r\n\r\n      function extraerPayload(data) {\r\n        const tabla = validarProxy(data);\r\n        const headers = tabla.headers;\r\n        const rows = tabla.rows;\r\n\r\n        const idxClave = buscarCol(headers, [\"CLAVE\"]);\r\n        const idxEstado = buscarCol(headers, [\"ESTADO\"]);\r\n        const idxDatos = buscarCol(headers, [\"DATOS_JSON\", \"DATOS JSON\"]);\r\n        const idxHtml = buscarCol(headers, [\"TEXTO_HTML\", \"TEXTO HTML\"]);\r\n\r\n        if (idxClave < 0) throw new Error(\"No se detect\u00f3 columna CLAVE.\");\r\n\r\n        const row = rows.find(function (r) {\r\n          const clave = norm(cell(r, idxClave));\r\n          const estado = idxEstado >= 0 ? norm(cell(r, idxEstado)) : \"PUBLICAR\";\r\n          return clave === norm(claveObjetivo) && (!estado || estado === \"PUBLICAR\");\r\n        });\r\n\r\n        if (!row) throw new Error(\"No se encontr\u00f3 CLAVE = FONDOS_TOP12 con ESTADO = PUBLICAR.\");\r\n\r\n        const jsonText = idxDatos >= 0 ? cell(row, idxDatos) : (idxHtml >= 0 ? cell(row, idxHtml) : \"\");\r\n        if (!jsonText) throw new Error(\"La fila FONDOS_TOP12 no tiene DATOS_JSON.\");\r\n\r\n        try {\r\n          return JSON.parse(jsonText);\r\n        } catch (e) {\r\n          throw new Error(\"DATOS_JSON de FONDOS_TOP12 no es JSON v\u00e1lido.\");\r\n        }\r\n      }\r\n\r\n      function parseFecha(fecha) {\r\n        const s = limpiar(fecha);\r\n        const dias = [\"domingo\", \"lunes\", \"martes\", \"mi\u00e9rcoles\", \"jueves\", \"viernes\", \"s\u00e1bado\"];\r\n        let y, m, d, hh, mm;\r\n        let a = s.match(\/^(\\d{4})-(\\d{2})-(\\d{2})[ T](\\d{2}):(\\d{2})\/);\r\n        if (a) {\r\n          y = Number(a[1]); m = Number(a[2]); d = Number(a[3]); hh = a[4]; mm = a[5];\r\n        }\r\n        if (!y || !m || !d) return s || \"sin fecha\";\r\n        const dt = new Date(y, m - 1, d);\r\n        return (dias[dt.getDay()] || \"\") + \" \" + String(d).padStart(2, \"0\") + \"-\" + String(m).padStart(2, \"0\") + \"-\" + y + \", \" + hh + \":\" + mm + \" hrs.\";\r\n      }\r\n\r\n      function fmtScore(x) {\r\n        const n = Number(x);\r\n        if (!Number.isFinite(n)) return \"N\/D\";\r\n        return n.toFixed(1).replace(\".\", \",\");\r\n      }\r\n\r\n      function fmtPct(x) {\r\n        const n = Number(x);\r\n        if (!Number.isFinite(n)) return \"N\/D\";\r\n        const pp = Math.abs(n) <= 1 ? n * 100 : n;\r\n        const signo = pp > 0 ? \"+\" : \"\";\r\n        return (signo + pp.toFixed(1) + \"%\").replace(\".\", \",\");\r\n      }\r\n\r\n      function fmtBase(x) {\r\n        const n = Number(x);\r\n        if (!Number.isFinite(n)) return \"N\/D\";\r\n        return n.toFixed(1).replace(\".\", \",\");\r\n      }\r\n\r\n      function recClase(f) {\r\n        const c = norm(f.rec_clase || \"\");\r\n        const r = norm(f.recomendacion_final || \"\");\r\n        if (c === \"POS\" || r.includes(\"ENTRAR\")) return \"tf-rec-pos\";\r\n        if (c === \"NEG\" || r.includes(\"SALIR\")) return \"tf-rec-neg\";\r\n        return \"tf-rec-neu\";\r\n      }\r\n\r\n      function renderSparkline(valores) {\r\n        if (!Array.isArray(valores) || valores.length < 2) {\r\n          return \"<div style='font-size:11px;color:#64748b;font-weight:650;padding-top:18px;'>Sin hist\u00f3rico suficiente<\/div>\";\r\n        }\r\n\r\n        const width = 260;\r\n        const height = 58;\r\n        const padX = 5;\r\n        const padY = 7;\r\n        let min = Math.min.apply(null, valores);\r\n        let max = Math.max.apply(null, valores);\r\n\r\n        if (min === max) { min -= 0.1; max += 0.1; }\r\n\r\n        const step = (width - padX * 2) \/ Math.max(valores.length - 1, 1);\r\n        const points = valores.map(function (v, i) {\r\n          const x = padX + i * step;\r\n          const ratio = (v - min) \/ (max - min);\r\n          const y = height - padY - ratio * (height - padY * 2);\r\n          return [x, y];\r\n        });\r\n\r\n        const d = points.map(function (p, i) {\r\n          return (i === 0 ? \"M\" : \"L\") + p[0].toFixed(2) + \" \" + p[1].toFixed(2);\r\n        }).join(\" \");\r\n\r\n        const baseY = height - padY;\r\n        const areaD = d +\r\n          \" L\" + points[points.length - 1][0].toFixed(2) + \" \" + baseY.toFixed(2) +\r\n          \" L\" + points[0][0].toFixed(2) + \" \" + baseY.toFixed(2) + \" Z\";\r\n        const zeroY = (100 >= min && 100 <= max)\r\n          ? height - padY - ((100 - min) \/ (max - min)) * (height - padY * 2)\r\n          : null;\r\n        const last = points[points.length - 1];\r\n\r\n        return (\r\n          \"<svg class='tf-spark-svg' viewBox='0 0 \" + width + \" \" + height + \"' preserveAspectRatio='none' aria-hidden='true'>\" +\r\n            \"<line class='tf-spark-base-axis' x1='0' y1='\" + baseY.toFixed(2) + \"' x2='\" + width + \"' y2='\" + baseY.toFixed(2) + \"'><\/line>\" +\r\n            (zeroY !== null ? \"<line class='tf-spark-axis' x1='0' y1='\" + zeroY.toFixed(2) + \"' x2='\" + width + \"' y2='\" + zeroY.toFixed(2) + \"'><\/line>\" : \"\") +\r\n            \"<path class='tf-spark-area' d='\" + areaD + \"'><\/path>\" +\r\n            \"<path class='tf-spark-line' d='\" + d + \"'><\/path>\" +\r\n            \"<circle class='tf-spark-dot' cx='\" + last[0].toFixed(2) + \"' cy='\" + last[1].toFixed(2) + \"' r='3.1'><\/circle>\" +\r\n          \"<\/svg>\"\r\n        );\r\n      }\r\n\r\n      function render(payload) {\r\n        const fondos = Array.isArray(payload.fondos) ? payload.fondos : [];\r\n        tituloBox.textContent = payload.titulo || \"Top fondos mutuos\";\r\n        subtituloBox.textContent = \"Ranking visual de los mejores fondos seg\u00fan el recomendador interno. Mini gr\u00e1fico en base 100 para lectura r\u00e1pida de tendencia.\";\r\n        fechaBox.textContent = parseFecha(payload.fecha_hora || \"\");\r\n        categoriaBox.textContent = payload.categoria || \"PRINCIPAL\";\r\n        criterioBox.textContent = payload.criterio || \"\u00cdndice final descendente\";\r\n\r\n        if (!fondos.length) {\r\n          contenidoBox.innerHTML = \"<div class='tf-error'><strong>No hay fondos para mostrar.<\/strong><\/div>\";\r\n          return;\r\n        }\r\n\r\n        contenidoBox.innerHTML =\r\n          \"<div class='tf-grid'>\" +\r\n          fondos.map(function (f) {\r\n            const serie = Array.isArray(f.spark_base100) ? f.spark_base100 : [];\r\n            const inicio = serie.length ? fmtBase(serie[0]) : \"N\/D\";\r\n            const fin = serie.length ? fmtBase(serie[serie.length - 1]) : \"N\/D\";\r\n            const nombre = f.nombre_fondo || f.codigo_publico || f.segmento_codigo || \"FM\";\r\n            const segmento = f.nombre_fondo ? (f.segmento_codigo || f.exposicion_fm || \"\") : (f.segmento || f.exposicion_fm || \"\");\r\n\r\n            return (\r\n              \"<article class='tf-card \" + recClase(f) + \"'>\" +\r\n                \"<div class='tf-topline'>\" +\r\n                  \"<span class='tf-rank'>#\" + esc(f.rank || \"\") + \"<\/span>\" +\r\n                  \"<span class='tf-family'>\" + esc(f.familia_mercado || f.familia || \"\") + \"<\/span>\" +\r\n                \"<\/div>\" +\r\n\r\n                \"<div>\" +\r\n                  \"<h3 class='tf-code'>\" + esc(nombre) + \"<\/h3>\" +\r\n                  \"<p class='tf-segment'>\" + esc(segmento) + \"<\/p>\" +\r\n                \"<\/div>\" +\r\n\r\n                \"<div class='tf-score-row'>\" +\r\n                  \"<div class='tf-score-box'>\" +\r\n                    \"<p class='tf-box-label'>\u00cdndice final<\/p>\" +\r\n                    \"<p class='tf-score'>\" + esc(fmtScore(f.indice_final)) + \"<\/p>\" +\r\n                  \"<\/div>\" +\r\n                  \"<div class='tf-rec-box'>\" +\r\n                    \"<p class='tf-box-label'>Recomendaci\u00f3n<\/p>\" +\r\n                    \"<span class='tf-chip'>\" + esc(f.recomendacion_final || \"N\/D\") + \"<\/span>\" +\r\n                  \"<\/div>\" +\r\n                \"<\/div>\" +\r\n\r\n                \"<div class='tf-spark-wrap'>\" +\r\n                  \"<div class='tf-spark-head'>\" +\r\n                    \"<span class='tf-spark-period'><span>20<\/span><span class='tf-spark-d'>D<\/span><\/span>\" +\r\n                    \"<span class='tf-spark-range'>\" + esc(inicio + \" \u2192 \" + fin + \" | \" + fmtPct(f.spark_var)) + \"<\/span>\" +\r\n                  \"<\/div>\" +\r\n                  renderSparkline(serie) +\r\n                \"<\/div>\" +\r\n\r\n                \"<div class='tf-metrics'>\" +\r\n                  \"<div class='tf-metric'><p class='tf-metric-label'>Rent. 20D<\/p><p class='tf-metric-value'>\" + esc(fmtPct(f.ret_20)) + \"<\/p><\/div>\" +\r\n                  \"<div class='tf-metric'><p class='tf-metric-label'>Rent. base<\/p><p class='tf-metric-value'>\" + esc(fmtPct(f.ret_base)) + \"<\/p><\/div>\" +\r\n                  \"<div class='tf-metric'><p class='tf-metric-label'>Peor ca\u00edda<\/p><p class='tf-metric-value'>\" + esc(fmtPct(f.peor_caida)) + \"<\/p><\/div>\" +\r\n                \"<\/div>\" +\r\n              \"<\/article>\"\r\n            );\r\n          }).join(\"\") +\r\n          \"<\/div>\" +\r\n          \"<div class='tf-note'><strong>Nota:<\/strong> ranking informativo basado en el \u00edndice final del recomendador de fondos mutuos. El mini gr\u00e1fico usa valor cuota en base 100 para mostrar la tendencia reciente. No constituye recomendaci\u00f3n personalizada de inversi\u00f3n.<\/div>\";\r\n      }\r\n\r\n      function renderError(error) {\r\n        fechaBox.textContent = \"sin actualizaci\u00f3n\";\r\n        categoriaBox.textContent = \"no disponible\";\r\n        criterioBox.textContent = \"no disponible\";\r\n        contenidoBox.innerHTML = \"<div class='tf-error'><strong>No fue posible cargar el Top 12 de fondos.<\/strong><br>\" + esc(error.message || error) + \"<\/div>\";\r\n      }\r\n\r\n      function fetchJson(url) {\r\n        const sep = url.includes(\"?\") ? \"&\" : \"?\";\r\n        const finalUrl = url + sep + \"refresh=1&_=\" + Date.now();\r\n        return fetch(finalUrl, { method: \"GET\", credentials: \"same-origin\", cache: \"no-store\" })\r\n          .then(function (response) {\r\n            if (!response.ok) throw new Error(\"HTTP \" + response.status + \" en \" + url);\r\n            return response.json();\r\n          });\r\n      }\r\n\r\n      function probarEndpoint(i, ultimoError) {\r\n        if (i >= endpoints.length) throw ultimoError || new Error(\"No se pudo consultar ning\u00fan endpoint.\");\r\n        return fetchJson(endpoints[i]).catch(function (err) {\r\n          return probarEndpoint(i + 1, err);\r\n        });\r\n      }\r\n\r\n      probarEndpoint(0, null)\r\n        .then(extraerPayload)\r\n        .then(render)\r\n        .catch(renderError);\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-0008442 elementor-section-stretched elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"0008442\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;stretch_section&quot;:&quot;section-stretched&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d20dc3e\" data-id=\"d20dc3e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0b764f7 elementor-widget elementor-widget-html\" data-id=\"0b764f7\" 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<!-- =========================================================\r\n     TASANDO.COM | 12 PEORES FONDOS MUTUOS\r\n     VERSI\u00d3N ROJA - LECTURA ROBUSTA FONDOS_PEORES12\r\n\r\n     Fuente:\r\n     WEB_COMENTARIOS \/ CLAVE = FONDOS_PEORES12\r\n\r\n     Correcciones:\r\n     - Mantiene el mismo ancho madre que los dem\u00e1s bloques.\r\n     - Centrado horizontal real.\r\n     - No usa translateY.\r\n     - No se superpone con bloques posteriores.\r\n     - Mantiene separaci\u00f3n inferior normal.\r\n     - Compatible con Elementor.\r\n     ========================================================= -->\r\n\r\n<section id=\"tasando-fondos-peores12-v1\">\r\n  <style>\r\n    #tasando-fondos-peores12-v1 {\r\n      --tasando-page-width: min(1240px, calc(100vw - 120px));\r\n      --tf-max: var(--tasando-page-width);\r\n      --tf-blue: #9f1239;\r\n      --tf-dark: #3f0715;\r\n      --tf-text: #3f0715;\r\n      --tf-muted: #64748b;\r\n      --tf-line: #fecdd3;\r\n      --tf-red-main: #e11d48;\r\n      --tf-pos-bg: #fff1f2;\r\n      --tf-pos-text: #9f1239;\r\n      --tf-pos-dot: #e11d48;\r\n      --tf-neu-bg: #fff7ed;\r\n      --tf-neu-text: #9a3412;\r\n      --tf-neu-dot: #fb923c;\r\n      --tf-neg-bg: #fee2e2;\r\n      --tf-neg-text: #7f1d1d;\r\n      --tf-neg-dot: #dc2626;\r\n\r\n      width: 100% !important;\r\n      max-width: 100% !important;\r\n      min-width: 0 !important;\r\n\r\n      \/* Ajuste principal:\r\n         El bloque es el primer recuadro visible de la p\u00e1gina.\r\n         Por eso s\u00ed puede subir de forma controlada, sin afectar los bloques siguientes. *\/\r\n      margin: 28px auto 34px auto !important;\r\n      left: auto !important;\r\n      right: auto !important;\r\n\r\n      padding: 0 !important;\r\n      font-family: Arial, Helvetica, sans-serif;\r\n      color: var(--tf-text);\r\n      box-sizing: border-box;\r\n      display: block !important;\r\n      clear: both !important;\r\n      float: none !important;\r\n      position: relative !important;\r\n      z-index: 1 !important;\r\n      left: auto !important;\r\n      right: auto !important;\r\n      transform: none !important;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1,\r\n    #tasando-fondos-peores12-v1 * {\r\n      box-sizing: border-box;\r\n    }\r\n\r\n    \/* =====================================================\r\n       ALINEACI\u00d3N MADRE\r\n       -----------------------------------------------------\r\n       Estos selectores liberan Elementor\/tema para que el\r\n       bloque pueda centrarse con el mismo ancho que los dem\u00e1s\r\n       bloques de \/fondos-mutuos\/.\r\n       ===================================================== *\/\r\n\r\n    body .entry-content:has(#tasando-fondos-peores12-v1),\r\n    body .page-content:has(#tasando-fondos-peores12-v1),\r\n    body .site-content:has(#tasando-fondos-peores12-v1),\r\n    body .content-area:has(#tasando-fondos-peores12-v1),\r\n    body .site-main:has(#tasando-fondos-peores12-v1),\r\n    body .elementor:has(#tasando-fondos-peores12-v1),\r\n    body .elementor-section:has(#tasando-fondos-peores12-v1),\r\n    body .elementor-top-section:has(#tasando-fondos-peores12-v1),\r\n    body .elementor-column:has(#tasando-fondos-peores12-v1),\r\n    body .elementor-container:has(#tasando-fondos-peores12-v1),\r\n    body .elementor-widget-wrap:has(#tasando-fondos-peores12-v1),\r\n    body .e-con:has(#tasando-fondos-peores12-v1),\r\n    body .e-con-inner:has(#tasando-fondos-peores12-v1) {\r\n      width: 100% !important;\r\n      max-width: none !important;\r\n      overflow: visible !important;\r\n      margin-top: 0 !important;\r\n      padding-top: 0 !important;\r\n      padding-left: 0 !important;\r\n      padding-right: 0 !important;\r\n    }\r\n\r\n    body .elementor-widget-html:has(#tasando-fondos-peores12-v1),\r\n    body .elementor-widget-html:has(#tasando-fondos-peores12-v1) > .elementor-widget-container {\r\n      width: 100% !important;\r\n      max-width: none !important;\r\n      overflow: visible !important;\r\n      margin-top: 0 !important;\r\n      padding-top: 0 !important;\r\n      margin-left: auto !important;\r\n      margin-right: auto !important;\r\n      padding-left: 0 !important;\r\n      padding-right: 0 !important;\r\n      left: auto !important;\r\n      right: auto !important;\r\n      transform: none !important;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-panel {\r\n      width: var(--tf-max) !important;\r\n      max-width: var(--tf-max) !important;\r\n      min-width: 0 !important;\r\n      margin: 0 auto !important;\r\n      background:\r\n        radial-gradient(circle at top right, rgba(225,29,72,0.16), transparent 260px),\r\n        radial-gradient(circle at bottom left, rgba(251,113,133,0.10), transparent 260px),\r\n        linear-gradient(180deg, #fff1f2 0%, #ffe4e6 100%);\r\n      border: 1px solid var(--tf-line);\r\n      border-radius: 22px;\r\n      padding: 34px 34px 38px 34px !important;\r\n      box-shadow: 0 16px 36px rgba(15, 23, 42, 0.10);\r\n      overflow: hidden;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-eyebrow {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      gap: 8px;\r\n      width: fit-content;\r\n      padding: 7px 12px;\r\n      border-radius: 999px;\r\n      background: #ffe4e6;\r\n      border: 1px solid rgba(225,29,72,0.28);\r\n      color: var(--tf-blue);\r\n      font-size: 12px;\r\n      font-weight: 850;\r\n      margin-bottom: 10px;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-eyebrow::before {\r\n      content: \"\";\r\n      width: 7px;\r\n      height: 7px;\r\n      border-radius: 50%;\r\n      background: var(--tf-red-main);\r\n      box-shadow: 0 0 0 4px rgba(225,29,72,0.14);\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-title {\r\n      margin: 0 0 8px 0;\r\n      color: var(--tf-dark);\r\n      font-size: clamp(24px, 2.2vw, 34px);\r\n      line-height: 1.12;\r\n      font-weight: 900;\r\n      letter-spacing: -0.5px;\r\n      max-width: 980px;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-subtitle {\r\n      margin: 0 0 16px 0;\r\n      color: #475569;\r\n      font-size: 13px;\r\n      line-height: 1.45;\r\n      font-weight: 500;\r\n      max-width: 980px;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-meta {\r\n      display: grid;\r\n      grid-template-columns: 1fr 1fr 1.3fr;\r\n      gap: 10px;\r\n      margin: 0 0 18px 0;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-meta-card {\r\n      background: #ffffff;\r\n      border: 1px solid #d7dde6;\r\n      border-radius: 15px;\r\n      padding: 12px 14px;\r\n      box-shadow: 0 7px 18px rgba(15, 23, 42, 0.06);\r\n      min-height: 72px;\r\n      display: flex;\r\n      flex-direction: column;\r\n      justify-content: center;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-meta-label {\r\n      margin: 0 0 6px 0;\r\n      color: var(--tf-muted);\r\n      font-size: 10px;\r\n      line-height: 1;\r\n      font-weight: 850;\r\n      text-transform: uppercase;\r\n      letter-spacing: 0.04em;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-meta-value {\r\n      margin: 0;\r\n      color: var(--tf-dark);\r\n      font-size: 15px;\r\n      line-height: 1.18;\r\n      font-weight: 850;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-grid {\r\n      display: grid;\r\n      grid-template-columns: repeat(4, minmax(0, 1fr));\r\n      gap: 12px;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-card {\r\n      background: #ffffff;\r\n      border: 1px solid #fecdd3;\r\n      border-radius: 16px;\r\n      padding: 13px;\r\n      min-height: 248px;\r\n      box-shadow: 0 7px 18px rgba(15, 23, 42, 0.06);\r\n      display: grid;\r\n      grid-template-rows: auto auto auto auto;\r\n      gap: 10px;\r\n      overflow: hidden;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-topline {\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: space-between;\r\n      gap: 8px;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-rank {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      min-width: 30px;\r\n      height: 26px;\r\n      border-radius: 999px;\r\n      background: #9f1239;\r\n      color: #ffffff;\r\n      font-size: 11px;\r\n      font-weight: 900;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-family {\r\n      color: var(--tf-muted);\r\n      font-size: 10px;\r\n      line-height: 1;\r\n      font-weight: 850;\r\n      text-transform: uppercase;\r\n      letter-spacing: 0.04em;\r\n      text-align: right;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-code {\r\n      margin: 0;\r\n      color: var(--tf-dark);\r\n      font-size: 13px;\r\n      line-height: 1.2;\r\n      font-weight: 900;\r\n      letter-spacing: -0.1px;\r\n      min-height: 32px;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-segment {\r\n      margin: 3px 0 0 0;\r\n      color: #475569;\r\n      font-size: 10px;\r\n      line-height: 1.25;\r\n      font-weight: 650;\r\n      display: -webkit-box;\r\n      -webkit-line-clamp: 2;\r\n      -webkit-box-orient: vertical;\r\n      overflow: hidden;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-score-row {\r\n      display: grid;\r\n      grid-template-columns: 0.85fr 1.15fr;\r\n      gap: 8px;\r\n      align-items: stretch;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-score-box,\r\n    #tasando-fondos-peores12-v1 .tf-rec-box {\r\n      border: 1px solid #e2e8f0;\r\n      border-radius: 13px;\r\n      padding: 10px;\r\n      min-height: 76px;\r\n      background: #f8fafc;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-box-label {\r\n      margin: 0 0 5px 0;\r\n      color: var(--tf-muted);\r\n      font-size: 9px;\r\n      font-weight: 850;\r\n      text-transform: uppercase;\r\n      letter-spacing: 0.04em;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-score {\r\n      margin: 0;\r\n      color: var(--tf-dark);\r\n      font-size: 26px;\r\n      line-height: 1;\r\n      font-weight: 950;\r\n      font-variant-numeric: tabular-nums;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-chip {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      gap: 6px;\r\n      width: fit-content;\r\n      max-width: 100%;\r\n      border-radius: 999px;\r\n      padding: 5px 9px;\r\n      font-size: 9.2px;\r\n      line-height: 1.15;\r\n      font-weight: 850;\r\n      border: 1px solid transparent;\r\n      white-space: normal;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-chip::before {\r\n      content: \"\";\r\n      width: 7px;\r\n      height: 7px;\r\n      border-radius: 50%;\r\n      display: inline-block;\r\n      flex: 0 0 7px;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-rec-pos .tf-chip {\r\n      background: var(--tf-pos-bg);\r\n      color: var(--tf-pos-text);\r\n      border-color: rgba(22,101,52,.18);\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-rec-pos .tf-chip::before {\r\n      background: var(--tf-pos-dot);\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-rec-neu .tf-chip {\r\n      background: var(--tf-neu-bg);\r\n      color: var(--tf-neu-text);\r\n      border-color: rgba(71,85,105,.18);\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-rec-neu .tf-chip::before {\r\n      background: var(--tf-neu-dot);\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-rec-neg .tf-chip {\r\n      background: var(--tf-neg-bg);\r\n      color: var(--tf-neg-text);\r\n      border-color: rgba(153,27,27,.18);\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-rec-neg .tf-chip::before {\r\n      background: var(--tf-neg-dot);\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-spark-wrap {\r\n      border: 1px solid #dbe5ef;\r\n      border-radius: 13px;\r\n      padding: 8px 9px;\r\n      background: linear-gradient(180deg, rgba(248,250,255,0.98) 0%, rgba(255,255,255,0.98) 100%);\r\n      min-height: 92px;\r\n      overflow: hidden;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-spark-head {\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: space-between;\r\n      gap: 6px;\r\n      margin: 0 0 5px 0;\r\n      line-height: 1;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-spark-period {\r\n      flex: 0 0 auto;\r\n      color: #475569;\r\n      font-size: 8.2px;\r\n      line-height: 1;\r\n      font-weight: 950;\r\n      letter-spacing: 0.02em;\r\n      text-transform: uppercase;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-spark-d {\r\n      color: var(--tf-red-main);\r\n      margin-left: 1px;\r\n      font-weight: 950;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-spark-range {\r\n      flex: 1 1 auto;\r\n      min-width: 0;\r\n      text-align: right;\r\n      color: #1f2937;\r\n      font-size: 7.2px;\r\n      line-height: 1;\r\n      font-weight: 850;\r\n      white-space: nowrap;\r\n      overflow: hidden;\r\n      text-overflow: clip;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-spark-svg {\r\n      width: 100%;\r\n      height: 58px;\r\n      display: block;\r\n      overflow: visible;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-spark-base-axis {\r\n      stroke: #334155;\r\n      stroke-width: 2.05;\r\n      opacity: 0.95;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-spark-axis {\r\n      stroke: #64748b;\r\n      stroke-width: 1.15;\r\n      opacity: 0.68;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-spark-area {\r\n      fill: rgba(225, 29, 72, 0.10);\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-spark-line {\r\n      fill: none;\r\n      stroke: #e11d48;\r\n      stroke-width: 3.1;\r\n      stroke-linecap: round;\r\n      stroke-linejoin: round;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-spark-dot {\r\n      fill: #be123c;\r\n      stroke: #ffffff;\r\n      stroke-width: 1.4;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-metrics {\r\n      display: grid;\r\n      grid-template-columns: repeat(3, minmax(0, 1fr));\r\n      gap: 7px;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-metric {\r\n      background: #ffffff;\r\n      border: 1px solid #e2e8f0;\r\n      border-radius: 11px;\r\n      padding: 8px;\r\n      min-height: 52px;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-metric-label {\r\n      margin: 0 0 4px 0;\r\n      color: #64748b;\r\n      font-size: 8.5px;\r\n      line-height: 1;\r\n      font-weight: 850;\r\n      text-transform: uppercase;\r\n      letter-spacing: .03em;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-metric-value {\r\n      margin: 0;\r\n      color: #0f172a;\r\n      font-size: 11.5px;\r\n      line-height: 1.1;\r\n      font-weight: 850;\r\n      font-variant-numeric: tabular-nums;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-note {\r\n      margin: 16px 0 0 0;\r\n      padding: 12px 14px;\r\n      border-radius: 14px;\r\n      background: rgba(255,255,255,0.72);\r\n      border: 1px solid #d7dde6;\r\n      color: #475569;\r\n      font-size: 12px;\r\n      line-height: 1.45;\r\n      font-weight: 500;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-note strong {\r\n      color: var(--tf-blue);\r\n      font-weight: 900;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-loading,\r\n    #tasando-fondos-peores12-v1 .tf-error {\r\n      padding: 18px;\r\n      border-radius: 13px;\r\n      background: #ffffff;\r\n      border: 1px solid #d7dde6;\r\n      color: var(--tf-muted);\r\n      font-size: 13px;\r\n      text-align: center;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-error {\r\n      background: #fff7ed;\r\n      border-color: #fed7aa;\r\n      color: #9a3412;\r\n      text-align: left;\r\n      line-height: 1.45;\r\n    }\r\n\r\n\r\n    #tasando-fondos-peores12-v1 .tf-card {\r\n      border-color: #fecdd3;\r\n      box-shadow: 0 7px 18px rgba(159, 18, 57, 0.08);\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-card:hover {\r\n      border-color: #fb7185;\r\n    }\r\n\r\n    @media (max-width: 980px) {\r\n      #tasando-fondos-peores12-v1 {\r\n        width: calc(100vw - 48px) !important;\r\n        max-width: calc(100vw - 48px) !important;\r\n        margin: -44px auto 32px auto !important;\r\n      }\r\n\r\n      #tasando-fondos-peores12-v1 .tf-grid {\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n      }\r\n\r\n      #tasando-fondos-peores12-v1 .tf-meta {\r\n        grid-template-columns: 1fr;\r\n      }\r\n    }\r\n\r\n    @media (max-width: 560px) {\r\n      #tasando-fondos-peores12-v1 {\r\n        width: 100% !important;\r\n        max-width: 100% !important;\r\n        margin: -24px auto 28px auto !important;\r\n        padding: 0 10px !important;\r\n      }\r\n\r\n      #tasando-fondos-peores12-v1 .tf-panel {\r\n        padding: 16px;\r\n        border-radius: 18px;\r\n      }\r\n\r\n      #tasando-fondos-peores12-v1 .tf-grid {\r\n        grid-template-columns: 1fr;\r\n      }\r\n    }\r\n\r\n\r\n    \/* =====================================================\r\n       AJUSTE FINAL DE PADDING BLOQUE ROJO\r\n       -----------------------------------------------------\r\n       S\u00f3lo aumenta aire interno de los recuadros.\r\n       No toca endpoint, JS, ranking ni datos.\r\n       ===================================================== *\/\r\n    #tasando-fondos-peores12-v1 .tf-panel {\r\n      padding: 34px 34px 38px 34px !important;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-meta {\r\n      gap: 14px !important;\r\n      margin: 0 0 22px 0 !important;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-meta-card {\r\n      padding: 21px 22px !important;\r\n      min-height: 92px !important;\r\n      justify-content: center !important;\r\n      align-items: flex-start !important;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-meta-label {\r\n      margin: 0 0 10px 0 !important;\r\n      line-height: 1.15 !important;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-meta-value {\r\n      line-height: 1.25 !important;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-card {\r\n      padding: 16px !important;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-score-box,\r\n    #tasando-fondos-peores12-v1 .tf-rec-box {\r\n      padding: 12px !important;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-spark-wrap {\r\n      padding: 10px 11px !important;\r\n    }\r\n\r\n    #tasando-fondos-peores12-v1 .tf-metric {\r\n      padding: 9px !important;\r\n    }\r\n\r\n    @media (max-width: 700px) {\r\n      #tasando-fondos-peores12-v1 .tf-panel {\r\n        padding: 22px 20px 24px 20px !important;\r\n      }\r\n\r\n      #tasando-fondos-peores12-v1 .tf-meta-card {\r\n        padding: 18px 18px !important;\r\n        min-height: 84px !important;\r\n      }\r\n    }\r\n\r\n  <\/style>\r\n\r\n  <div class=\"tf-panel\">\r\n    <div class=\"tf-eyebrow\">D\u00f3nde no invertir<\/div>\r\n    <h2 class=\"tf-title\" id=\"tfBadTitulo\">Fondos a evitar<\/h2>\r\n    <p class=\"tf-subtitle\" id=\"tfBadSubtitulo\">Contraste visual de los fondos con peor lectura relativa seg\u00fan el recomendador interno de Tasando.com.<\/p>\r\n\r\n    <div class=\"tf-meta\">\r\n      <div class=\"tf-meta-card\">\r\n        <div class=\"tf-meta-label\">Fecha corrida<\/div>\r\n        <div class=\"tf-meta-value\" id=\"tfBadFecha\">cargando...<\/div>\r\n      <\/div>\r\n      <div class=\"tf-meta-card\">\r\n        <div class=\"tf-meta-label\">Categor\u00eda<\/div>\r\n        <div class=\"tf-meta-value\" id=\"tfBadCategoria\">cargando...<\/div>\r\n      <\/div>\r\n      <div class=\"tf-meta-card\">\r\n        <div class=\"tf-meta-label\">Criterio<\/div>\r\n        <div class=\"tf-meta-value\" id=\"tfBadCriterio\">cargando...<\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div id=\"tfBadContenido\">\r\n      <div class=\"tf-loading\">Cargando fondos a evitar...<\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function () {\r\n      const root = document.getElementById(\"tasando-fondos-peores12-v1\");\r\n      if (!root) return;\r\n\r\n      const endpoints = [\r\n        window.location.origin + \"\/propiedades\/wp-json\/tasando\/v1\/sheet\/comentario-mercados\",\r\n        window.location.origin + \"\/propiedades\/wp-json\/tasando\/v1\/sheet\/web-comentarios\",\r\n        window.location.origin + \"\/propiedades\/wp-json\/tasando\/v1\/sheet\/mercados-comentario\",\r\n        window.location.origin + \"\/wp-json\/tasando\/v1\/sheet\/comentario-mercados\",\r\n        window.location.origin + \"\/wp-json\/tasando\/v1\/sheet\/web-comentarios\",\r\n        window.location.origin + \"\/wp-json\/tasando\/v1\/sheet\/mercados-comentario\"\r\n      ];\r\n\r\n      const clavesObjetivo = [\"FONDOS_PEORES12\", \"FONDOS_BOTTOM12\", \"FONDOS_WORST12\"];\r\n      const claveObjetivo = clavesObjetivo[0];\r\n\r\n      const tituloBox = root.querySelector(\"#tfBadTitulo\");\r\n      const subtituloBox = root.querySelector(\"#tfBadSubtitulo\");\r\n      const fechaBox = root.querySelector(\"#tfBadFecha\");\r\n      const categoriaBox = root.querySelector(\"#tfBadCategoria\");\r\n      const criterioBox = root.querySelector(\"#tfBadCriterio\");\r\n      const contenidoBox = root.querySelector(\"#tfBadContenido\");\r\n\r\n      function limpiar(v) {\r\n        if (v === null || v === undefined) return \"\";\r\n        return String(v).replace(\/\\r\\n\/g, \"\\n\").replace(\/\\r\/g, \"\\n\").trim();\r\n      }\r\n\r\n      function esc(v) {\r\n        return limpiar(v)\r\n          .replace(\/&\/g, \"&amp;\")\r\n          .replace(\/<\/g, \"&lt;\")\r\n          .replace(\/>\/g, \"&gt;\")\r\n          .replace(\/\"\/g, \"&quot;\")\r\n          .replace(\/'\/g, \"&#039;\");\r\n      }\r\n\r\n      function norm(v) {\r\n        return limpiar(v)\r\n          .toUpperCase()\r\n          .normalize(\"NFD\")\r\n          .replace(\/[\\u0300-\\u036f]\/g, \"\")\r\n          .replace(\/[^A-Z0-9]\/g, \"\");\r\n      }\r\n\r\n      function buscarCol(headers, aliases) {\r\n        const h = headers.map(norm);\r\n        const a = aliases.map(norm);\r\n        for (let i = 0; i < h.length; i++) {\r\n          if (a.includes(h[i])) return i;\r\n        }\r\n        return -1;\r\n      }\r\n\r\n      function cell(row, idx) {\r\n        if (!Array.isArray(row)) return \"\";\r\n        if (idx < 0 || idx >= row.length) return \"\";\r\n        return limpiar(row[idx]);\r\n      }\r\n\r\n      function validarProxy(data) {\r\n        const real = data && data.data && data.data.headers ? data.data : data;\r\n        if (!real || real.ok !== true) {\r\n          throw new Error((real && real.error) ? real.error : \"Respuesta inv\u00e1lida del proxy.\");\r\n        }\r\n        const headers = Array.isArray(real.headers) ? real.headers : [];\r\n        const rows = Array.isArray(real.rows) ? real.rows : [];\r\n        if (!headers.length || !rows.length) throw new Error(\"El proxy no devolvi\u00f3 datos.\");\r\n        return { headers, rows };\r\n      }\r\n\r\n      function estadoAceptado(v) {\r\n        const e = norm(v);\r\n        if (!e) return true;\r\n        if (e === \"PUBLICAR\" || e === \"PUBLICADO\" || e === \"ACTIVO\" || e === \"OK\" || e === \"SI\" || e === \"S\u00cd\" || e === \"1\") return true;\r\n        if (e.includes(\"PUBLICAR\") || e.includes(\"PUBLICADO\")) return true;\r\n        if (e.includes(\"BORRADOR\") || e.includes(\"OCULTO\") || e.includes(\"INACTIVO\") || e.includes(\"NOPUBLICAR\")) return false;\r\n        return true;\r\n      }\r\n\r\n      function limpiarJsonText(v) {\r\n        let s = limpiar(v);\r\n        if (!s) return \"\";\r\n\r\n        s = s\r\n          .replace(\/&quot;\/g, '\"')\r\n          .replace(\/&#34;\/g, '\"')\r\n          .replace(\/&#039;\/g, \"'\")\r\n          .replace(\/&apos;\/g, \"'\")\r\n          .replace(\/&amp;\/g, \"&\");\r\n\r\n        s = s.replace(\/^```(?:json)?\\s*\/i, \"\").replace(\/```$\/i, \"\").trim();\r\n        return s;\r\n      }\r\n\r\n      function parsearPayloadJson(texto, descripcion) {\r\n        const limpio = limpiarJsonText(texto);\r\n        if (!limpio) throw new Error(descripcion + \" est\u00e1 vac\u00edo.\");\r\n\r\n        try {\r\n          const obj = JSON.parse(limpio);\r\n          if (obj && obj.payload && Array.isArray(obj.payload.fondos)) return obj.payload;\r\n          if (obj && obj.data && Array.isArray(obj.data.fondos)) return obj.data;\r\n          return obj;\r\n        } catch (e) {\r\n          throw new Error(descripcion + \" no es JSON v\u00e1lido.\");\r\n        }\r\n      }\r\n\r\n      function extraerPayload(data) {\r\n        const tabla = validarProxy(data);\r\n        const headers = tabla.headers;\r\n        const rows = tabla.rows;\r\n\r\n        const idxClave = buscarCol(headers, [\"CLAVE\", \"KEY\", \"CODIGO\", \"C\u00d3DIGO\"]);\r\n        const idxEstado = buscarCol(headers, [\"ESTADO\", \"STATUS\"]);\r\n        const idxDatos = buscarCol(headers, [\"DATOS_JSON\", \"DATOS JSON\", \"JSON\", \"PAYLOAD_JSON\", \"PAYLOAD JSON\"]);\r\n        const idxHtml = buscarCol(headers, [\"TEXTO_HTML\", \"TEXTO HTML\", \"HTML\", \"CONTENIDO\", \"TEXTO\"]);\r\n\r\n        if (idxClave < 0) {\r\n          throw new Error(\"No se detect\u00f3 columna CLAVE en WEB_COMENTARIOS.\");\r\n        }\r\n\r\n        const clavesBuscadas = clavesObjetivo.map(norm);\r\n\r\n        const filasPublicables = rows.filter(function (r) {\r\n          return idxEstado < 0 || estadoAceptado(cell(r, idxEstado));\r\n        });\r\n\r\n        let row = filasPublicables.find(function (r) {\r\n          return clavesBuscadas.includes(norm(cell(r, idxClave)));\r\n        });\r\n\r\n        if (!row) {\r\n          row = filasPublicables.find(function (r) {\r\n            const clave = norm(cell(r, idxClave));\r\n            return clavesBuscadas.some(function (claveBuscada) {\r\n              return clave.includes(claveBuscada) || claveBuscada.includes(clave);\r\n            });\r\n          });\r\n        }\r\n\r\n        if (!row) {\r\n          const clavesDisponibles = rows\r\n            .map(function (r) { return cell(r, idxClave); })\r\n            .filter(Boolean)\r\n            .slice(0, 18)\r\n            .join(\" | \");\r\n\r\n          throw new Error(\r\n            \"No se encontr\u00f3 una fila utilizable para FONDOS_PEORES12. \" +\r\n            \"Revise que exista CLAVE = FONDOS_PEORES12 o FONDOS_BOTTOM12 y que ESTADO sea PUBLICAR\/PUBLICADO\/ACTIVO, o que DATOS_JSON contenga un objeto con la propiedad fondos. \" +\r\n            \"Claves encontradas: \" + (clavesDisponibles || \"sin claves visibles\")\r\n          );\r\n        }\r\n\r\n        const jsonText = idxDatos >= 0 ? cell(row, idxDatos) : (idxHtml >= 0 ? cell(row, idxHtml) : \"\");\r\n        const payload = parsearPayloadJson(jsonText, \"DATOS_JSON de la fila \" + (cell(row, idxClave) || claveObjetivo));\r\n\r\n        if (!payload || !Array.isArray(payload.fondos)) {\r\n          throw new Error(\"El JSON encontrado no contiene la propiedad fondos como arreglo.\");\r\n        }\r\n\r\n        return payload;\r\n      }\r\n\r\n            function parseFecha(fecha) {\r\n        const s = limpiar(fecha);\r\n        const dias = [\"domingo\", \"lunes\", \"martes\", \"mi\u00e9rcoles\", \"jueves\", \"viernes\", \"s\u00e1bado\"];\r\n        let y, m, d, hh, mm;\r\n        let a = s.match(\/^(\\d{4})-(\\d{2})-(\\d{2})[ T](\\d{2}):(\\d{2})\/);\r\n        if (a) {\r\n          y = Number(a[1]); m = Number(a[2]); d = Number(a[3]); hh = a[4]; mm = a[5];\r\n        }\r\n        if (!y || !m || !d) return s || \"sin fecha\";\r\n        const dt = new Date(y, m - 1, d);\r\n        return (dias[dt.getDay()] || \"\") + \" \" + String(d).padStart(2, \"0\") + \"-\" + String(m).padStart(2, \"0\") + \"-\" + y + \", \" + hh + \":\" + mm + \" hrs.\";\r\n      }\r\n\r\n      function fmtScore(x) {\r\n        const n = Number(x);\r\n        if (!Number.isFinite(n)) return \"N\/D\";\r\n        return n.toFixed(1).replace(\".\", \",\");\r\n      }\r\n\r\n      function fmtPct(x) {\r\n        const n = Number(x);\r\n        if (!Number.isFinite(n)) return \"N\/D\";\r\n        const pp = Math.abs(n) <= 1 ? n * 100 : n;\r\n        const signo = pp > 0 ? \"+\" : \"\";\r\n        return (signo + pp.toFixed(1) + \"%\").replace(\".\", \",\");\r\n      }\r\n\r\n      function fmtBase(x) {\r\n        const n = Number(x);\r\n        if (!Number.isFinite(n)) return \"N\/D\";\r\n        return n.toFixed(1).replace(\".\", \",\");\r\n      }\r\n\r\n      function recClase(f) {\r\n        const c = norm(f.rec_clase || \"\");\r\n        const r = norm(f.recomendacion_final || \"\");\r\n        if (c === \"POS\" || r.includes(\"ENTRAR\")) return \"tf-rec-pos\";\r\n        if (c === \"NEG\" || r.includes(\"SALIR\")) return \"tf-rec-neg\";\r\n        return \"tf-rec-neu\";\r\n      }\r\n\r\n      function renderSparkline(valores) {\r\n        if (!Array.isArray(valores) || valores.length < 2) {\r\n          return \"<div style='font-size:11px;color:#64748b;font-weight:650;padding-top:18px;'>Sin hist\u00f3rico suficiente<\/div>\";\r\n        }\r\n\r\n        const width = 260;\r\n        const height = 58;\r\n        const padX = 5;\r\n        const padY = 7;\r\n        let min = Math.min.apply(null, valores);\r\n        let max = Math.max.apply(null, valores);\r\n\r\n        if (min === max) { min -= 0.1; max += 0.1; }\r\n\r\n        const step = (width - padX * 2) \/ Math.max(valores.length - 1, 1);\r\n        const points = valores.map(function (v, i) {\r\n          const x = padX + i * step;\r\n          const ratio = (v - min) \/ (max - min);\r\n          const y = height - padY - ratio * (height - padY * 2);\r\n          return [x, y];\r\n        });\r\n\r\n        const d = points.map(function (p, i) {\r\n          return (i === 0 ? \"M\" : \"L\") + p[0].toFixed(2) + \" \" + p[1].toFixed(2);\r\n        }).join(\" \");\r\n\r\n        const baseY = height - padY;\r\n        const areaD = d +\r\n          \" L\" + points[points.length - 1][0].toFixed(2) + \" \" + baseY.toFixed(2) +\r\n          \" L\" + points[0][0].toFixed(2) + \" \" + baseY.toFixed(2) + \" Z\";\r\n        const zeroY = (100 >= min && 100 <= max)\r\n          ? height - padY - ((100 - min) \/ (max - min)) * (height - padY * 2)\r\n          : null;\r\n        const last = points[points.length - 1];\r\n\r\n        return (\r\n          \"<svg class='tf-spark-svg' viewBox='0 0 \" + width + \" \" + height + \"' preserveAspectRatio='none' aria-hidden='true'>\" +\r\n            \"<line class='tf-spark-base-axis' x1='0' y1='\" + baseY.toFixed(2) + \"' x2='\" + width + \"' y2='\" + baseY.toFixed(2) + \"'><\/line>\" +\r\n            (zeroY !== null ? \"<line class='tf-spark-axis' x1='0' y1='\" + zeroY.toFixed(2) + \"' x2='\" + width + \"' y2='\" + zeroY.toFixed(2) + \"'><\/line>\" : \"\") +\r\n            \"<path class='tf-spark-area' d='\" + areaD + \"'><\/path>\" +\r\n            \"<path class='tf-spark-line' d='\" + d + \"'><\/path>\" +\r\n            \"<circle class='tf-spark-dot' cx='\" + last[0].toFixed(2) + \"' cy='\" + last[1].toFixed(2) + \"' r='3.1'><\/circle>\" +\r\n          \"<\/svg>\"\r\n        );\r\n      }\r\n\r\n      function render(payload) {\r\n        const fondosBase = Array.isArray(payload.fondos) ? payload.fondos : [];\r\n        const fondos = fondosBase.slice().sort(function (a, b) {\r\n          const ia = Number(a.indice_final);\r\n          const ib = Number(b.indice_final);\r\n          if (Number.isFinite(ia) && Number.isFinite(ib)) return ia - ib;\r\n          if (Number.isFinite(ia)) return -1;\r\n          if (Number.isFinite(ib)) return 1;\r\n          return 0;\r\n        }).slice(0, 12);\r\n        tituloBox.textContent = payload.titulo || \"Fondos a evitar\";\r\n        subtituloBox.textContent = \"Ranking visual de los fondos con menor puntaje relativo. Mini gr\u00e1fico en base 100 para identificar deterioro, rezago o se\u00f1ales desfavorables.\";\r\n        fechaBox.textContent = parseFecha(payload.fecha_hora || \"\");\r\n        categoriaBox.textContent = payload.categoria || \"PRINCIPAL\";\r\n        criterioBox.textContent = payload.criterio || \"\u00cdndice final ascendente\";\r\n\r\n        if (!fondos.length) {\r\n          contenidoBox.innerHTML = \"<div class='tf-error'><strong>No hay fondos a evitar para mostrar.<\/strong><\/div>\";\r\n          return;\r\n        }\r\n\r\n        contenidoBox.innerHTML =\r\n          \"<div class='tf-grid'>\" +\r\n          fondos.map(function (f) {\r\n            const serie = Array.isArray(f.spark_base100) ? f.spark_base100 : [];\r\n            const inicio = serie.length ? fmtBase(serie[0]) : \"N\/D\";\r\n            const fin = serie.length ? fmtBase(serie[serie.length - 1]) : \"N\/D\";\r\n            const nombre = f.nombre_fondo || f.codigo_publico || f.segmento_codigo || \"FM\";\r\n            const segmento = f.nombre_fondo ? (f.segmento_codigo || f.exposicion_fm || \"\") : (f.segmento || f.exposicion_fm || \"\");\r\n\r\n            return (\r\n              \"<article class='tf-card \" + recClase(f) + \"'>\" +\r\n                \"<div class='tf-topline'>\" +\r\n                  \"<span class='tf-rank'>#\" + esc(f.rank || \"\") + \"<\/span>\" +\r\n                  \"<span class='tf-family'>\" + esc(f.familia_mercado || f.familia || \"\") + \"<\/span>\" +\r\n                \"<\/div>\" +\r\n\r\n                \"<div>\" +\r\n                  \"<h3 class='tf-code'>\" + esc(nombre) + \"<\/h3>\" +\r\n                  \"<p class='tf-segment'>\" + esc(segmento) + \"<\/p>\" +\r\n                \"<\/div>\" +\r\n\r\n                \"<div class='tf-score-row'>\" +\r\n                  \"<div class='tf-score-box'>\" +\r\n                    \"<p class='tf-box-label'>\u00cdndice final<\/p>\" +\r\n                    \"<p class='tf-score'>\" + esc(fmtScore(f.indice_final)) + \"<\/p>\" +\r\n                  \"<\/div>\" +\r\n                  \"<div class='tf-rec-box'>\" +\r\n                    \"<p class='tf-box-label'>Recomendaci\u00f3n<\/p>\" +\r\n                    \"<span class='tf-chip'>\" + esc(f.recomendacion_final || \"N\/D\") + \"<\/span>\" +\r\n                  \"<\/div>\" +\r\n                \"<\/div>\" +\r\n\r\n                \"<div class='tf-spark-wrap'>\" +\r\n                  \"<div class='tf-spark-head'>\" +\r\n                    \"<span class='tf-spark-period'><span>20<\/span><span class='tf-spark-d'>D<\/span><\/span>\" +\r\n                    \"<span class='tf-spark-range'>\" + esc(inicio + \" \u2192 \" + fin + \" | \" + fmtPct(f.spark_var)) + \"<\/span>\" +\r\n                  \"<\/div>\" +\r\n                  renderSparkline(serie) +\r\n                \"<\/div>\" +\r\n\r\n                \"<div class='tf-metrics'>\" +\r\n                  \"<div class='tf-metric'><p class='tf-metric-label'>Rent. 20D<\/p><p class='tf-metric-value'>\" + esc(fmtPct(f.ret_20)) + \"<\/p><\/div>\" +\r\n                  \"<div class='tf-metric'><p class='tf-metric-label'>Rent. base<\/p><p class='tf-metric-value'>\" + esc(fmtPct(f.ret_base)) + \"<\/p><\/div>\" +\r\n                  \"<div class='tf-metric'><p class='tf-metric-label'>Peor ca\u00edda<\/p><p class='tf-metric-value'>\" + esc(fmtPct(f.peor_caida)) + \"<\/p><\/div>\" +\r\n                \"<\/div>\" +\r\n              \"<\/article>\"\r\n            );\r\n          }).join(\"\") +\r\n          \"<\/div>\" +\r\n          \"<div class='tf-note'><strong>Nota:<\/strong> ranking informativo de contraste basado en el \u00edndice final del recomendador de fondos mutuos. Esta vista busca identificar fondos con peor lectura relativa o se\u00f1ales desfavorables. No constituye recomendaci\u00f3n personalizada de inversi\u00f3n.<\/div>\";\r\n      }\r\n\r\n      function renderError(error) {\r\n        fechaBox.textContent = \"sin actualizaci\u00f3n\";\r\n        categoriaBox.textContent = \"no disponible\";\r\n        criterioBox.textContent = \"no disponible\";\r\n        contenidoBox.innerHTML = \"<div class='tf-error'><strong>No fue posible cargar los 12 peores fondos.<\/strong><br>\" + esc(error.message || error) + \"<\/div>\";\r\n      }\r\n\r\n      function fetchJson(url) {\r\n        const sep = url.includes(\"?\") ? \"&\" : \"?\";\r\n        const finalUrl = url + sep + \"refresh=1&_=\" + Date.now();\r\n        return fetch(finalUrl, { method: \"GET\", credentials: \"same-origin\", cache: \"no-store\" })\r\n          .then(function (response) {\r\n            if (!response.ok) throw new Error(\"HTTP \" + response.status + \" en \" + url);\r\n            return response.json();\r\n          });\r\n      }\r\n\r\n      function probarEndpoint(i, ultimoError) {\r\n        if (i >= endpoints.length) throw ultimoError || new Error(\"No se pudo consultar ning\u00fan endpoint.\");\r\n        return fetchJson(endpoints[i]).catch(function (err) {\r\n          return probarEndpoint(i + 1, err);\r\n        });\r\n      }\r\n\r\n      probarEndpoint(0, null)\r\n        .then(extraerPayload)\r\n        .then(render)\r\n        .catch(renderError);\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1ce0ef7 elementor-widget elementor-widget-html\" data-id=\"1ce0ef7\" 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<!-- =========================================================\r\nTASANDO.COM | RANKING FM - CAMPOS OPERATIVOS\r\nVERSI\u00d3N CENTRADA \/ ALINEADA \/ TABLA COMPACTA\r\nEndpoint: \/propiedades\/wp-json\/tasando\/v1\/sheet\/fm-aceleraciones\r\n\r\nCorrecci\u00f3n:\r\n- Se elimina margin-left:50% y translateX(-50%).\r\n- El panel se alinea contra el bloque azul o contra la matriz anterior.\r\n- No se toca la l\u00f3gica de datos.\r\n- Mantiene orden por \u00cdNDICE FINAL.\r\n- Ajusta ancho al bloque superior y compacta columnas m\u00e9tricas sin eliminar informaci\u00f3n.\r\n========================================================= -->\r\n\r\n<section id=\"tasando-ranking-fm-ret20\">\r\n  <style>\r\n    #tasando-ranking-fm-ret20{\r\n      --tr-desktop-width:min(1240px,calc(100vw - 120px));\r\n      --tr-notebook-width:calc(100vw - 48px);\r\n      --tr-panel-bg-1:#eef2f5;\r\n      --tr-panel-bg-2:#e3e8ef;\r\n      --tr-border:#cbd5e1;\r\n      --tr-dark:#111827;\r\n      --tr-text:#0f172a;\r\n      --tr-muted:#475569;\r\n      --tr-green:#69be28;\r\n\r\n      font-family:Arial,Helvetica,sans-serif;\r\n      width:100%!important;\r\n      max-width:100%!important;\r\n      margin:8px 0 45px 0!important;\r\n      padding:0!important;\r\n      color:var(--tr-text);\r\n      background:transparent;\r\n      box-sizing:border-box;\r\n      position:relative!important;\r\n      overflow:visible;\r\n      z-index:1;\r\n      clear:both!important;\r\n      float:none!important;\r\n      display:block!important;\r\n      transform:none!important;\r\n      left:auto!important;\r\n      right:auto!important;\r\n    }\r\n\r\n    body .elementor-widget-html:has(#tasando-ranking-fm-ret20),\r\n    body .elementor-widget-html:has(#tasando-ranking-fm-ret20)>.elementor-widget-container,\r\n    body .elementor-column:has(#tasando-ranking-fm-ret20),\r\n    body .elementor-container:has(#tasando-ranking-fm-ret20),\r\n    body .elementor-widget-wrap:has(#tasando-ranking-fm-ret20),\r\n    body .e-con:has(#tasando-ranking-fm-ret20),\r\n    body .e-con-inner:has(#tasando-ranking-fm-ret20){\r\n      width:100%!important;\r\n      max-width:none!important;\r\n      overflow:visible!important;\r\n      margin-top:0!important;\r\n      padding-top:0!important;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 *{box-sizing:border-box;}\r\n\r\n    \/* Reduce el espacio que deja la matriz inmediatamente anterior *\/\r\n    #tasando-matriz-fm-acc{\r\n      margin-bottom:12px!important;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 .tr-panel{\r\n      width:var(--tr-desktop-width)!important;\r\n      max-width:var(--tr-desktop-width)!important;\r\n      margin:0 auto!important;\r\n      background:linear-gradient(180deg,var(--tr-panel-bg-1) 0%,var(--tr-panel-bg-2) 100%);\r\n      border:1px solid var(--tr-border);\r\n      border-radius:18px;\r\n      padding:18px;\r\n      box-shadow:0 14px 34px rgba(15,23,42,.12);\r\n      position:relative;\r\n      z-index:1;\r\n      transform:none;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 .tr-head{\r\n      display:flex;\r\n      justify-content:space-between;\r\n      align-items:flex-start;\r\n      gap:16px;\r\n      margin-bottom:12px;\r\n      flex-wrap:wrap;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 h3{\r\n      margin:0 0 5px 0;\r\n      font-size:21px;\r\n      line-height:1.15;\r\n      color:var(--tr-text);\r\n      font-weight:800;\r\n      letter-spacing:-.3px;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 .tr-subtitle{\r\n      margin:0;\r\n      color:var(--tr-muted);\r\n      font-size:12px;\r\n      line-height:1.35;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 .tr-badge{\r\n      background:#fff;\r\n      border:1px solid #d7dde6;\r\n      border-radius:999px;\r\n      padding:7px 11px;\r\n      font-size:11px;\r\n      color:var(--tr-muted);\r\n      white-space:nowrap;\r\n      box-shadow:0 2px 8px rgba(15,23,42,.06);\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 .tr-generated{\r\n      display:flex;\r\n      align-items:center;\r\n      gap:8px;\r\n      width:100%;\r\n      margin:0 0 12px 0;\r\n      padding:10px 12px;\r\n      border-radius:14px;\r\n      border:1px solid rgba(105,190,40,.34);\r\n      background:rgba(237,246,232,.82);\r\n      color:var(--tr-text);\r\n      font-size:12px;\r\n      line-height:1.35;\r\n      font-weight:750;\r\n      box-shadow:0 4px 12px rgba(15,23,42,.06);\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 .tr-generated strong{color:var(--tr-dark);font-weight:950;}\r\n\r\n    #tasando-ranking-fm-ret20 .tr-generated-dot{\r\n      width:9px;height:9px;min-width:9px;\r\n      border-radius:999px;\r\n      background:var(--tr-green);\r\n      box-shadow:0 0 0 4px rgba(105,190,40,.16);\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 .tr-wrap{\r\n      width:100%!important;\r\n      max-width:100%!important;\r\n      overflow-x:hidden;\r\n      overflow-y:hidden;\r\n      border-radius:12px;\r\n      border:1px solid var(--tr-border);\r\n      background:#fff;\r\n      margin:0 auto;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 table{\r\n      width:100%!important;\r\n      min-width:100%!important;\r\n      table-layout:fixed!important;\r\n      border-collapse:collapse;\r\n      margin:0 auto;\r\n      background:#fff;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 col.tr-col-rank{width:3%!important;}\r\n    #tasando-ranking-fm-ret20 col.tr-col-sector{width:13%!important;}\r\n    #tasando-ranking-fm-ret20 col.tr-col-var-dia{width:4.1%!important;}\r\n    #tasando-ranking-fm-ret20 col.tr-col-rent20{width:4.1%!important;}\r\n    #tasando-ranking-fm-ret20 col.tr-col-acc20{width:4.1%!important;}\r\n    #tasando-ranking-fm-ret20 col.tr-col-pos3{width:4.1%!important;}\r\n    #tasando-ranking-fm-ret20 col.tr-col-rent3{width:4.1%!important;}\r\n    #tasando-ranking-fm-ret20 col.tr-col-acc3{width:4.1%!important;}\r\n    #tasando-ranking-fm-ret20 col.tr-col-vol3{width:4.1%!important;}\r\n    #tasando-ranking-fm-ret20 col.tr-col-peor10{width:4.6%!important;}\r\n    #tasando-ranking-fm-ret20 col.tr-col-indice{width:4.6%!important;}\r\n    #tasando-ranking-fm-ret20 col.tr-col-interpretacion{width:36.1%!important;}\r\n    #tasando-ranking-fm-ret20 col.tr-col-reco{width:10%!important;}\r\n\r\n    #tasando-ranking-fm-ret20 th,\r\n    #tasando-ranking-fm-ret20 td{\r\n      border-bottom:1px solid #e2e8f0;\r\n      border-right:1px solid #edf2f7;\r\n      overflow:hidden;\r\n      vertical-align:middle;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 th{\r\n      height:34px!important;\r\n      padding:3px 1px!important;\r\n      background:var(--tr-dark);\r\n      color:#fff;\r\n      font-size:6.45px!important;\r\n      line-height:1.06!important;\r\n      font-weight:850!important;\r\n      text-align:center!important;\r\n      white-space:normal!important;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 td{\r\n      padding:4px 1px!important;\r\n      font-size:7px!important;\r\n      line-height:1.1!important;\r\n      font-weight:650!important;\r\n      text-align:center!important;\r\n      white-space:nowrap!important;\r\n      text-overflow:clip;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 td.tr-rank{\r\n      background:#f8fafc!important;\r\n      color:#334155;\r\n      font-size:7.4px!important;\r\n      font-weight:850!important;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 td.tr-sector{\r\n      background:#f8fafc!important;\r\n      color:var(--tr-text)!important;\r\n      font-size:7.45px!important;\r\n      line-height:1.12!important;\r\n      font-weight:850!important;\r\n      text-align:left!important;\r\n      white-space:normal!important;\r\n      padding-left:5px!important;\r\n      padding-right:4px!important;\r\n      text-transform:uppercase;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 tbody tr:nth-child(even) td{background-color:#f8fafc;}\r\n    #tasando-ranking-fm-ret20 tbody tr:nth-child(even) td.tr-sector,\r\n    #tasando-ranking-fm-ret20 tbody tr:nth-child(even) td.tr-rank{background:#f1f5f9!important;}\r\n    #tasando-ranking-fm-ret20 tbody tr:hover td{filter:brightness(.97);}\r\n\r\n    #tasando-ranking-fm-ret20 .tr-pos{color:#064e3b;font-weight:800!important;}\r\n    #tasando-ranking-fm-ret20 .tr-neg{color:#7f1d1d;font-weight:800!important;}\r\n    #tasando-ranking-fm-ret20 .tr-zero{color:#475569;font-weight:700!important;background:#f8fafc;}\r\n    #tasando-ranking-fm-ret20 .tr-empty{color:#94a3b8;background:#fff;}\r\n    #tasando-ranking-fm-ret20 .tr-num{font-weight:800!important;}\r\n    #tasando-ranking-fm-ret20 .tr-head-rent20{background:#00f000!important;color:#002b00!important;font-weight:950!important;}\r\n    #tasando-ranking-fm-ret20 .tr-head-final{background:#1f2937!important;color:#fff!important;font-weight:950!important;}\r\n\r\n    #tasando-ranking-fm-ret20 .tr-interpretacion{\r\n      text-align:left!important;\r\n      white-space:normal!important;\r\n      font-size:7.4px!important;\r\n      line-height:1.16!important;\r\n      font-weight:700!important;\r\n      color:#1f2937;\r\n      padding:6px 7px!important;\r\n      background:#fff;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 .tr-reco{\r\n      font-size:7px!important;\r\n      line-height:1.06!important;\r\n      font-weight:950!important;\r\n      text-align:center!important;\r\n      white-space:normal!important;\r\n      padding:5px 3px!important;\r\n      text-transform:uppercase;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 .tr-reco-verde{background:#00f000!important;color:#003300!important;}\r\n    #tasando-ranking-fm-ret20 .tr-reco-amarillo{background:#fff200!important;color:#3a2500!important;}\r\n    #tasando-ranking-fm-ret20 .tr-reco-rojo{background:#ff0000!important;color:#fff!important;}\r\n    #tasando-ranking-fm-ret20 .tr-reco-neutra{background:#e5e7eb!important;color:#111827!important;}\r\n\r\n    #tasando-ranking-fm-ret20 .tr-note{\r\n      margin:9px 0 0 0;\r\n      color:#64748b;\r\n      font-size:10.8px;\r\n      line-height:1.35;\r\n    }\r\n\r\n    #tasando-ranking-fm-ret20 .tr-error{\r\n      background:#fff7ed;\r\n      color:#9a3412;\r\n      border:1px solid #fed7aa;\r\n      padding:12px;\r\n      border-radius:12px;\r\n      font-size:13px;\r\n      line-height:1.45;\r\n    }\r\n\r\n    @media(max-width:1200px) and (min-width:701px){\r\n      #tasando-matriz-fm-acc{\r\n        margin-bottom:10px!important;\r\n      }\r\n\r\n      #tasando-ranking-fm-ret20{\r\n        margin-top:8px!important;\r\n        margin-bottom:42px!important;\r\n      }\r\n\r\n      #tasando-ranking-fm-ret20 .tr-panel{\r\n        width:var(--tr-notebook-width)!important;\r\n        max-width:var(--tr-notebook-width)!important;\r\n        padding:16px;\r\n      }\r\n\r\n      #tasando-ranking-fm-ret20 th{font-size:6.45px!important;}\r\n      #tasando-ranking-fm-ret20 td{font-size:6.75px!important;}\r\n      #tasando-ranking-fm-ret20 .tr-interpretacion{font-size:7.15px!important;}\r\n    }\r\n\r\n    @media(max-width:700px){\r\n      #tasando-matriz-fm-acc{\r\n        margin-bottom:10px!important;\r\n      }\r\n\r\n      #tasando-ranking-fm-ret20{\r\n        width:100%!important;\r\n        max-width:100%!important;\r\n        margin-left:0!important;\r\n        margin-right:0!important;\r\n        margin-top:10px!important;\r\n        margin-bottom:28px!important;\r\n        transform:none!important;\r\n        padding:0 12px!important;\r\n      }\r\n\r\n      #tasando-ranking-fm-ret20 .tr-panel{\r\n        width:100%!important;\r\n        max-width:100%!important;\r\n        padding:14px;\r\n        border-radius:16px;\r\n      }\r\n\r\n      #tasando-ranking-fm-ret20 .tr-head{display:block;margin-bottom:10px;}\r\n      #tasando-ranking-fm-ret20 h3{font-size:18px;line-height:1.2;margin-bottom:6px;}\r\n      #tasando-ranking-fm-ret20 .tr-subtitle{font-size:12px;margin-bottom:10px;}\r\n      #tasando-ranking-fm-ret20 .tr-badge{display:inline-block;font-size:11px;padding:7px 10px;margin-top:4px;}\r\n      #tasando-ranking-fm-ret20 .tr-wrap{overflow-x:auto;border-radius:12px;}\r\n\r\n      #tasando-ranking-fm-ret20 table{\r\n        min-width:980px!important;\r\n        width:980px!important;\r\n        table-layout:fixed!important;\r\n      }\r\n\r\n      #tasando-ranking-fm-ret20 th,\r\n      #tasando-ranking-fm-ret20 td{\r\n        padding:7px 3px!important;\r\n        font-size:8.6px!important;\r\n        line-height:1.14!important;\r\n      }\r\n\r\n      #tasando-ranking-fm-ret20 td.tr-sector{font-size:8.8px!important;}\r\n      #tasando-ranking-fm-ret20 .tr-reco{font-size:8px!important;padding:7px 3px!important;}\r\n      #tasando-ranking-fm-ret20 .tr-interpretacion{font-size:8.2px!important;line-height:1.16!important;}\r\n      #tasando-ranking-fm-ret20 .tr-note{font-size:10.5px;}\r\n    }\r\n  <\/style>\r\n\r\n  <script>\r\n    (function(){\r\n      function qs(sel){ return document.querySelector(sel); }\r\n\r\n      function getReferenciaRankingFM(){\r\n        return (\r\n          qs(\"#tasando-matriz-fm-acc .tm-panel\") ||\r\n          qs(\"#tasando-fm-intro .tfi-panel\") ||\r\n          qs(\"#tasando-fondos-top12-v1 .tft-panel\") ||\r\n          qs(\"#tasando-fondos-top12-v1 .tf-panel\") ||\r\n          qs(\"#tasando-fondos-top12-v1\")\r\n        );\r\n      }\r\n\r\n      function alinearRankingFM(){\r\n        var panel = qs(\"#tasando-ranking-fm-ret20 .tr-panel\");\r\n        var ref = getReferenciaRankingFM();\r\n\r\n        if(!panel || !ref) return;\r\n\r\n        if(window.innerWidth <= 700){\r\n          panel.style.width = \"\";\r\n          panel.style.maxWidth = \"\";\r\n          panel.style.transform = \"\";\r\n          return;\r\n        }\r\n\r\n        panel.style.transform = \"\";\r\n        panel.style.width = \"\";\r\n        panel.style.maxWidth = \"\";\r\n\r\n        var refRect = ref.getBoundingClientRect();\r\n\r\n        if(!refRect || refRect.width < 500) return;\r\n\r\n        panel.style.width = refRect.width + \"px\";\r\n        panel.style.maxWidth = refRect.width + \"px\";\r\n\r\n        requestAnimationFrame(function(){\r\n          var panelRect = panel.getBoundingClientRect();\r\n          var delta = refRect.left - panelRect.left;\r\n\r\n          if(Math.abs(delta) > 1){\r\n            panel.style.transform = \"translateX(\" + delta + \"px)\";\r\n          }else{\r\n            panel.style.transform = \"\";\r\n          }\r\n        });\r\n      }\r\n\r\n      window.__alinearRankingFM = alinearRankingFM;\r\n\r\n      window.addEventListener(\"load\", alinearRankingFM);\r\n      window.addEventListener(\"resize\", alinearRankingFM);\r\n\r\n      setTimeout(alinearRankingFM, 150);\r\n      setTimeout(alinearRankingFM, 600);\r\n      setTimeout(alinearRankingFM, 1400);\r\n      setTimeout(alinearRankingFM, 2400);\r\n\r\n      if(window.MutationObserver){\r\n        var obs = new MutationObserver(function(){\r\n          clearTimeout(window.__trAlignTimer);\r\n          window.__trAlignTimer = setTimeout(alinearRankingFM, 120);\r\n        });\r\n\r\n        obs.observe(document.body,{childList:true,subtree:true});\r\n      }\r\n    })();\r\n  <\/script>\r\n\r\n  <div class=\"tr-panel\">\r\n    <div class=\"tr-head\">\r\n      <div>\r\n        <h3>Ranking Fondos Mutuos por \u00cdndice Final<\/h3>\r\n        <p id=\"trSubtitulo\" class=\"tr-subtitle\">\r\n          Vista operativa: m\u00e9tricas principales del modelo, \u00edndice final, interpretaci\u00f3n final y recomendaci\u00f3n final. Las ventanas base se leen din\u00e1micamente desde los encabezados de la hoja. Los fondos se muestran con c\u00f3digo p\u00fablico estable.\r\n        <\/p>\r\n      <\/div>\r\n      <div id=\"trEstado\" class=\"tr-badge\">Cargando datos...<\/div>\r\n    <\/div>\r\n\r\n    <div id=\"trFechaCorrida\" class=\"tr-generated\" style=\"display:none;\"><\/div>\r\n\r\n    <div id=\"trTabla\" class=\"tr-wrap\">\r\n      <table>\r\n        <tbody>\r\n          <tr>\r\n            <td>Cargando informaci\u00f3n desde Tasando.com...<\/td>\r\n          <\/tr>\r\n        <\/tbody>\r\n      <\/table>\r\n    <\/div>\r\n\r\n    <p class=\"tr-note\">\r\n      Fuente: base de datos interna Tasando.com. Tabla ordenada por \u00cdNDICE FINAL descendente. Los fondos se muestran mediante c\u00f3digo p\u00fablico; el nombre espec\u00edfico se mantiene reservado. La columna RECOMENDACI\u00d3N FINAL se colorea por escala relativa del \u00cdNDICE FINAL: alto en verde, intermedio en amarillo y bajo en rojo.\r\n    <\/p>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function(){\r\n      const PROXY_URL=\"\/propiedades\/wp-json\/tasando\/v1\/sheet\/fm-aceleraciones\";\r\n\r\n      const CAMPOS=[\r\n        {key:\"varDia\",label:\"VAR DIA<br>CALC\",colClass:\"tr-col-var-dia\",tdClass:\"tr-num\",tipo:\"porcentaje\",claves:[\"VAR DIA CALC\",\"VAR_DIA_CALC\",\"VAR DIA\",\"VAR_DIA\"]},\r\n        {key:\"rent20\",label:\"RENT<br>(20)\",colClass:\"tr-col-rent20\",thClass:\"tr-head-rent20\",tdClass:\"tr-num\",tipo:\"porcentaje\",claves:[\"RENT(20)\",\"RENT 20\",\"RET 20\",\"RET20\",\"RENT20\",\"RENTABILIDAD 20\"]},\r\n        {key:\"acc20\",label:\"ACC<br>20\",colClass:\"tr-col-acc20\",tdClass:\"tr-num\",tipo:\"porcentaje\",claves:[\"ACC 20\",\"ACC20\",\"ACC_20\",\"ACELERACION 20\",\"ACELERACI\u00d3N 20\"]},\r\n        {key:\"posBase\",label:\"% POS<br>N\",colClass:\"tr-col-pos3\",tdClass:\"tr-num\",tipo:\"porcentaje_pos\",claves:[\r\n          \"% POS 5\",\"%POS5\",\"PCT POS 5\",\"PCT_POS_5\",\"PCTPOS5\",\"POS 5\",\"POS5\",\r\n          \"% POS 3\",\"%POS3\",\"PCT POS 3\",\"PCT_POS_3\",\"PCTPOS3\",\"POS 3\",\"POS3\",\r\n          \"% POS 10\",\"%POS10\",\"PCT POS 10\",\"PCT_POS_10\",\"PCTPOS10\",\"POS 10\",\"POS10\",\r\n          \"% POS 20\",\"%POS20\",\"PCT POS 20\",\"PCT_POS_20\",\"PCTPOS20\",\"POS 20\",\"POS20\"\r\n        ]},\r\n        {key:\"rentBase\",label:\"RENT<br>(N)\",colClass:\"tr-col-rent3\",tdClass:\"tr-num\",tipo:\"porcentaje\",claves:[\r\n          \"RENT(5)\",\"RENT 5\",\"RET 5\",\"RET5\",\"RENT5\",\"RENTABILIDAD 5\",\r\n          \"RENT(3)\",\"RENT 3\",\"RET 3\",\"RET3\",\"RENT3\",\"RENTABILIDAD 3\",\r\n          \"RENT(10)\",\"RENT 10\",\"RET 10\",\"RET10\",\"RENT10\",\"RENTABILIDAD 10\",\r\n          \"RENT(20)\",\"RENT 20\",\"RET 20\",\"RET20\",\"RENT20\",\"RENTABILIDAD 20\"\r\n        ]},\r\n        {key:\"accBase\",label:\"ACC<br>N\",colClass:\"tr-col-acc3\",tdClass:\"tr-num\",tipo:\"porcentaje\",claves:[\r\n          \"ACC 5\",\"ACC5\",\"ACC_5\",\"ACELERACION 5\",\"ACELERACI\u00d3N 5\",\r\n          \"ACC 3\",\"ACC3\",\"ACC_3\",\"ACELERACION 3\",\"ACELERACI\u00d3N 3\",\r\n          \"ACC 10\",\"ACC10\",\"ACC_10\",\"ACELERACION 10\",\"ACELERACI\u00d3N 10\",\r\n          \"ACC 20\",\"ACC20\",\"ACC_20\",\"ACELERACION 20\",\"ACELERACI\u00d3N 20\"\r\n        ]},\r\n        {key:\"volBase\",label:\"VOL<br>N\",colClass:\"tr-col-vol3\",tdClass:\"tr-num\",tipo:\"porcentaje\",claves:[\r\n          \"VOL 5\",\"VOL5\",\"VOL_5\",\"VOLATILIDAD 5\",\r\n          \"VOL 3\",\"VOL3\",\"VOL_3\",\"VOLATILIDAD 3\",\r\n          \"VOL 10\",\"VOL10\",\"VOL_10\",\"VOLATILIDAD 10\",\r\n          \"VOL 20\",\"VOL20\",\"VOL_20\",\"VOLATILIDAD 20\"\r\n        ]},\r\n        {key:\"peorCaidaBase\",label:\"PEOR<br>CA\u00cdDA N\",colClass:\"tr-col-peor10\",tdClass:\"tr-num\",tipo:\"porcentaje\",claves:[\r\n          \"PEOR CAIDA 10\",\"PEOR CA\u00cdDA 10\",\"PEOR_CAIDA_10\",\"PEORCAIDA10\",\"MIN 10\",\"MIN10\",\"DD 10\",\"DD10\",\r\n          \"PEOR CAIDA 5\",\"PEOR CA\u00cdDA 5\",\"PEOR_CAIDA_5\",\"PEORCAIDA5\",\"MIN 5\",\"MIN5\",\"DD 5\",\"DD5\",\r\n          \"PEOR CAIDA 20\",\"PEOR CA\u00cdDA 20\",\"PEOR_CAIDA_20\",\"PEORCAIDA20\",\"MIN 20\",\"MIN20\",\"DD 20\",\"DD20\",\r\n          \"PEOR CAIDA 3\",\"PEOR CA\u00cdDA 3\",\"PEOR_CAIDA_3\",\"PEORCAIDA3\",\"MIN 3\",\"MIN3\",\"DD 3\",\"DD3\"\r\n        ]},\r\n        {\r\n          key:\"indiceFinal\",\r\n          label:\"\u00cdNDICE<br>FINAL\",\r\n          colClass:\"tr-col-indice\",\r\n          tdClass:\"tr-num\",\r\n          tipo:\"numero\",\r\n          claves:[\r\n            \"INDICE FINAL\",\r\n            \"\u00cdNDICE FINAL\",\r\n            \"INDICE_FINAL\",\r\n            \"\u00cdNDICE_FINAL\",\r\n            \"INDICEFINAL\",\r\n            \"\u00cdNDICEFINAL\"\r\n          ]\r\n        },\r\n        {key:\"interpretacionFinal\",label:\"INTERPRETACI\u00d3N<br>FINAL\",colClass:\"tr-col-interpretacion\",thClass:\"tr-head-final\",tdClass:\"tr-interpretacion\",tipo:\"texto\",claves:[\"INTERPRETACION FINAL\",\"INTERPRETACI\u00d3N FINAL\",\"INTERPRETACION_FINAL\"]},\r\n        {key:\"recomendacionFinal\",label:\"RECOMENDACI\u00d3N<br>FINAL\",colClass:\"tr-col-reco\",thClass:\"tr-head-final\",tdClass:\"tr-reco\",tipo:\"recomendacion\",claves:[\"RECOMENDACION FINAL\",\"RECOMENDACI\u00d3N FINAL\",\"RECOMENDACION_FINAL\"]}\r\n      ];\r\n\r\n      function limpiarTexto(v){if(v===null||v===undefined)return \"\";return String(v).trim();}\r\n\r\n      function normalizarHeader(v){\r\n        return limpiarTexto(v).toUpperCase()\r\n          .normalize(\"NFD\").replace(\/[\\u0300-\\u036f]\/g,\"\")\r\n          .replace(\/\\s+\/g,\"\").replace(\/\\.\/g,\"\").replace(\/_\/g,\"\")\r\n          .replace(\/[()]\/g,\"\").replace(\/\\\/\/g,\"\").replace(\/%\/g,\"PORC\");\r\n      }\r\n\r\n      function escaparHTML(texto){\r\n        return limpiarTexto(texto)\r\n          .replace(\/&\/g,\"&amp;\").replace(\/<\/g,\"&lt;\").replace(\/>\/g,\"&gt;\")\r\n          .replace(\/\"\/g,\"&quot;\").replace(\/'\/g,\"&#039;\");\r\n      }\r\n\r\n      function valorCelda(cell){\r\n        if(cell===null||cell===undefined)return \"\";\r\n        if(typeof cell===\"string\"||typeof cell===\"number\")return limpiarTexto(cell);\r\n        if(cell.f!==undefined&&cell.f!==null)return limpiarTexto(cell.f);\r\n        if(cell.v!==undefined&&cell.v!==null)return limpiarTexto(cell.v);\r\n        return \"\";\r\n      }\r\n\r\n      function normalizarNumero(valor){\r\n        let s=limpiarTexto(valor).replace(\"%\",\"\").replace(\/\\s\/g,\"\").replace(\/[^\\d,.\\-]\/g,\"\");\r\n        if(!s)return null;\r\n        if(s.includes(\",\")&&s.includes(\".\")){\r\n          if(s.lastIndexOf(\",\")>s.lastIndexOf(\".\"))s=s.replace(\/\\.\/g,\"\").replace(\",\",\".\");\r\n          else s=s.replace(\/,\/g,\"\");\r\n        }else if(s.includes(\",\")){s=s.replace(\",\",\".\");}\r\n        const n=Number(s);\r\n        return isNaN(n)?null:n;\r\n      }\r\n\r\n      function numeroPorcentaje(valor){\r\n        const raw=limpiarTexto(valor);\r\n        const n=normalizarNumero(raw);\r\n        if(n===null)return null;\r\n        if(!raw.includes(\"%\")&&Math.abs(n)>0&&Math.abs(n)<=1)return n*100;\r\n        return n;\r\n      }\r\n\r\n      function formatearPorcentaje(valor,decimales){\r\n        const n=numeroPorcentaje(valor);\r\n        if(n===null)return limpiarTexto(valor)||\"-\";\r\n        return n.toFixed(decimales).replace(\".\",\",\")+\"%\";\r\n      }\r\n\r\n      function formatearNumero(valor,decimales){\r\n        const n=normalizarNumero(valor);\r\n        if(n===null)return limpiarTexto(valor)||\"-\";\r\n        return n.toFixed(decimales).replace(\".\",\",\");\r\n      }\r\n\r\n      function colorVariacion(valor){\r\n        const n=numeroPorcentaje(valor);\r\n        if(n===null)return{clase:\"tr-empty\",style:\"\"};\r\n        if(Math.abs(n)<.0001)return{clase:\"tr-zero\",style:\"\"};\r\n        const intensidad=Math.min(Math.abs(n)\/8,1);\r\n        const alpha=.10+intensidad*.38;\r\n        if(n>0)return{clase:\"tr-pos\",style:\"background: rgba(16, 185, 129, \"+alpha.toFixed(2)+\");\"};\r\n        return{clase:\"tr-neg\",style:\"background: rgba(239, 68, 68, \"+alpha.toFixed(2)+\");\"};\r\n      }\r\n\r\n      function colorNumero(valor){\r\n        const n=normalizarNumero(valor);\r\n        if(n===null)return{clase:\"tr-empty\",style:\"\"};\r\n        if(Math.abs(n)<.0001)return{clase:\"tr-zero\",style:\"\"};\r\n        if(n>0)return{clase:\"tr-pos\",style:\"background: rgba(16, 185, 129, 0.16);\"};\r\n        return{clase:\"tr-neg\",style:\"background: rgba(239, 68, 68, 0.16);\"};\r\n      }\r\n\r\n      function colorPos(valor){\r\n        const nRaw=numeroPorcentaje(valor);\r\n        if(nRaw===null)return{clase:\"tr-empty\",style:\"\"};\r\n        const n=Math.max(0,Math.min(100,nRaw));\r\n        if(Math.abs(n-50)<.0001)return{clase:\"tr-zero\",style:\"background: rgba(245, 158, 11, 0.18); color: #3a2500;\"};\r\n        if(n>50){\r\n          const intensidad=(n-50)\/50;\r\n          const alpha=.14+intensidad*.48;\r\n          return{clase:\"tr-pos\",style:\"background: rgba(16, 185, 129, \"+alpha.toFixed(2)+\"); color: #064e3b;\"};\r\n        }\r\n        const intensidad=(50-n)\/50;\r\n        const alpha=.14+intensidad*.48;\r\n        return{clase:\"tr-neg\",style:\"background: rgba(239, 68, 68, \"+alpha.toFixed(2)+\"); color: #7f1d1d;\"};\r\n      }\r\n\r\n      function claseRecomendacionPorIndice(indice, minIndice, maxIndice){\r\n        if(indice===null||indice===undefined||isNaN(indice))return\"tr-reco-neutra\";\r\n        if(minIndice===null||maxIndice===null||minIndice===undefined||maxIndice===undefined)return\"tr-reco-neutra\";\r\n\r\n        if(Math.abs(maxIndice-minIndice)<.0001){\r\n          return\"tr-reco-amarillo\";\r\n        }\r\n\r\n        const ratio=(indice-minIndice)\/(maxIndice-minIndice);\r\n\r\n        if(ratio>=0.66)return\"tr-reco-verde\";\r\n        if(ratio<=0.33)return\"tr-reco-rojo\";\r\n        return\"tr-reco-amarillo\";\r\n      }\r\n\r\n      function mostrarError(mensaje){\r\n        const estado=document.getElementById(\"trEstado\");\r\n        const cont=document.getElementById(\"trTabla\");\r\n        if(estado)estado.textContent=\"Error de carga\";\r\n        if(cont){\r\n          cont.innerHTML='<div class=\"tr-error\"><strong>No fue posible leer la informaci\u00f3n.<\/strong><br>'+\r\n            escaparHTML(mensaje)+\"<br><br>Revise el endpoint del proxy y que la hoja tenga los encabezados esperados.<\/div>\";\r\n        }\r\n      }\r\n\r\n      function buscarIndice(headers,claves,fallback){\r\n        const clavesNorm=(claves||[]).map(normalizarHeader);\r\n        for(let c=0;c<clavesNorm.length;c++){\r\n          for(let i=0;i<headers.length;i++){\r\n            if(normalizarHeader(headers[i].label)===clavesNorm[c])return headers[i].index;\r\n          }\r\n        }\r\n        return fallback;\r\n      }\r\n\r\n      function convertirProxyAGviz(payload){\r\n        if(!payload||payload.ok!==true||!Array.isArray(payload.headers)||!Array.isArray(payload.rows)){\r\n          throw new Error(\"El proxy no devolvi\u00f3 estructura v\u00e1lida: se esperaban headers y rows.\");\r\n        }\r\n        const cols=payload.headers.map(function(h,index){return{id:\"C\"+index,label:limpiarTexto(h),type:\"string\"};});\r\n        const rows=payload.rows.map(function(row){\r\n          const c=cols.map(function(_,index){\r\n            const value=row&&row[index]!==undefined&&row[index]!==null?limpiarTexto(row[index]):\"\";\r\n            return{v:value,f:value};\r\n          });\r\n          return{c:c};\r\n        });\r\n        return{table:{cols:cols,rows:rows},_proxy:payload};\r\n      }\r\n\r\n      function obtenerFechaHoraCorrida(payload){\r\n        if(payload&&Array.isArray(payload.headers)&&Array.isArray(payload.rows)){\r\n          const idx=payload.headers.findIndex(function(h){return normalizarHeader(h)===\"FECHAHORACORRIDA\";});\r\n          if(idx>=0){\r\n            for(let i=0;i<payload.rows.length;i++){\r\n              const row=payload.rows[i]||[];\r\n              const valor=row[idx]!==undefined&&row[idx]!==null?limpiarTexto(row[idx]):\"\";\r\n              if(valor)return valor;\r\n            }\r\n          }\r\n        }\r\n        if(payload&&payload.fecha_hora_corrida)return limpiarTexto(payload.fecha_hora_corrida);\r\n        if(payload&&payload.updated_at)return limpiarTexto(payload.updated_at);\r\n        return \"\";\r\n      }\r\n\r\n      function formatearFechaHoraCorrida(valor){\r\n        const raw=limpiarTexto(valor);\r\n        if(!raw)return \"\";\r\n        let m=raw.match(\/^(\\d{4})-(\\d{2})-(\\d{2})[ T](\\d{2}):(\\d{2})(?::\\d{2})?\/);\r\n        if(m)return m[3]+\"-\"+m[2]+\"-\"+m[1]+\" a las \"+m[4]+\":\"+m[5];\r\n        m=raw.match(\/^(\\d{2})[-\\\/](\\d{2})[-\\\/](\\d{4})\\s+(\\d{2}):(\\d{2})(?::\\d{2})?\/);\r\n        if(m)return m[1]+\"-\"+m[2]+\"-\"+m[3]+\" a las \"+m[4]+\":\"+m[5];\r\n        return raw;\r\n      }\r\n\r\n      function actualizarFechaHoraCorrida(payload){\r\n        const box=document.getElementById(\"trFechaCorrida\");\r\n        if(!box)return;\r\n        const fecha=formatearFechaHoraCorrida(obtenerFechaHoraCorrida(payload));\r\n        if(!fecha){box.style.display=\"none\";box.innerHTML=\"\";return;}\r\n        box.style.display=\"flex\";\r\n        box.innerHTML='<span class=\"tr-generated-dot\" aria-hidden=\"true\"><\/span>'+\r\n          '<span><strong>Recomendaci\u00f3n generada<\/strong> el d\u00eda '+escaparHTML(fecha)+\"<\/span>\";\r\n      }\r\n\r\n      function construirDatos(response){\r\n        const cols=response.table.cols||[];\r\n        const rows=response.table.rows||[];\r\n        const headers=cols.map(function(col,index){return{index:index,label:limpiarTexto(col.label||col.id||\"\")};});\r\n\r\n        const indiceExposicion=buscarIndice(\r\n          headers,\r\n          [\r\n            \"SEGMENTO \/ CODIGO\",\r\n            \"SEGMENTO \/ C\u00d3DIGO\",\r\n            \"SEGMENTO CODIGO\",\r\n            \"SEGMENTO C\u00d3DIGO\",\r\n            \"SEGMENTO_CODIGO\",\r\n            \"SEGMENTO_C\u00d3DIGO\",\r\n            \"CODIGO PUBLICO FM\",\r\n            \"C\u00d3DIGO P\u00daBLICO FM\",\r\n            \"CODIGO_PUBLICO_FM\",\r\n            \"C\u00d3DIGO_PUBLICO_FM\"\r\n          ],\r\n          null\r\n        );\r\n\r\n        if(indiceExposicion===null||indiceExposicion===undefined){\r\n          const muestraHeaders=headers.map(function(h){return h.label;}).filter(Boolean).slice(0,60).join(\" | \");\r\n          throw new Error(\r\n            \"No se detect\u00f3 la columna p\u00fablica SEGMENTO \/ CODIGO. \"+\r\n            \"Por seguridad no se usar\u00e1 la primera columna f\u00edsica de la Sheet, porque puede contener NOMBRE FONDO. \"+\r\n            \"Encabezados recibidos: \"+muestraHeaders\r\n          );\r\n        }\r\n\r\n        const campos=CAMPOS.map(function(cfg){\r\n          return Object.assign({},cfg,{index:buscarIndice(headers,cfg.claves,null)});\r\n        });\r\n\r\n        const faltantes=campos.filter(function(c){return c.index===null||c.index===undefined;})\r\n          .map(function(c){return c.label.replace(\/<br>\/g,\" \");});\r\n\r\n        if(faltantes.length){\r\n          const muestraHeaders=headers.map(function(h){return h.label;}).filter(Boolean).slice(0,60).join(\" | \");\r\n          throw new Error(\"Faltan columnas para construir la vista: \"+faltantes.join(\", \")+\". Encabezados recibidos: \"+muestraHeaders);\r\n        }\r\n\r\n        const campoOrden=campos.find(function(c){return c.key===\"indiceFinal\";});\r\n\r\n        if(!campoOrden){\r\n          throw new Error(\"No se encontr\u00f3 el campo de ordenamiento \u00cdNDICE FINAL.\");\r\n        }\r\n\r\n        const filas=rows.map(function(row){\r\n          const exposicion=row.c&&row.c[indiceExposicion]?valorCelda(row.c[indiceExposicion]):\"\";\r\n          const valorOrden=campoOrden&&row.c&&row.c[campoOrden.index]?valorCelda(row.c[campoOrden.index]):\"\";\r\n          return{exposicion:exposicion,row:row,orden:normalizarNumero(valorOrden)};\r\n        }).filter(function(r){return limpiarTexto(r.exposicion)!==\"\";})\r\n          .sort(function(a,b){\r\n            const av=a.orden,bv=b.orden;\r\n            if(av===null&&bv===null)return 0;\r\n            if(av===null)return 1;\r\n            if(bv===null)return -1;\r\n            return bv-av;\r\n          });\r\n\r\n        const indicesValidos=filas.map(function(f){return f.orden;})\r\n          .filter(function(n){return n!==null&&n!==undefined&&!isNaN(n);});\r\n\r\n        const minIndice=indicesValidos.length?Math.min.apply(null,indicesValidos):null;\r\n        const maxIndice=indicesValidos.length?Math.max.apply(null,indicesValidos):null;\r\n\r\n        return{\r\n          headers:headers,\r\n          indiceExposicion:indiceExposicion,\r\n          campos:campos,\r\n          filas:filas,\r\n          minIndice:minIndice,\r\n          maxIndice:maxIndice\r\n        };\r\n      }\r\n\r\n      function renderValor(campo,valor,fila,datos){\r\n        if(campo.tipo===\"porcentaje\"){\r\n          const color=colorVariacion(valor);\r\n          return{clase:campo.tdClass+\" \"+color.clase,style:color.style,texto:formatearPorcentaje(valor,2)};\r\n        }\r\n        if(campo.tipo===\"porcentaje_pos\"){\r\n          const color=colorPos(valor);\r\n          return{clase:campo.tdClass+\" \"+color.clase,style:color.style,texto:formatearPorcentaje(valor,0)};\r\n        }\r\n        if(campo.tipo===\"numero\"){\r\n          const color=colorNumero(valor);\r\n          const decimales = campo.key === \"indiceFinal\" ? 0 : 2;\r\n          return{clase:campo.tdClass+\" \"+color.clase,style:color.style,texto:formatearNumero(valor,decimales)};\r\n        }\r\n        if(campo.tipo===\"recomendacion\"){\r\n          const claseIndice=claseRecomendacionPorIndice(fila.orden,datos.minIndice,datos.maxIndice);\r\n          return{clase:campo.tdClass+\" \"+claseIndice,style:\"\",texto:valor||\"-\"};\r\n        }\r\n        return{clase:campo.tdClass,style:\"\",texto:valor||\"-\"};\r\n      }\r\n\r\n      function renderTabla(response){\r\n        try{\r\n          if(!response||!response.table||!response.table.cols||!response.table.rows){\r\n            mostrarError(\"La respuesta no tiene estructura v\u00e1lida.\");\r\n            return;\r\n          }\r\n\r\n          const datos=construirDatos(response);\r\n          if(!datos.filas.length){\r\n            mostrarError(\"No se detectaron filas con datos.\");\r\n            return;\r\n          }\r\n\r\n          let html=\"\";\r\n          html+=\"<table><colgroup>\";\r\n          html+='<col class=\"tr-col-rank\"><col class=\"tr-col-sector\">';\r\n          datos.campos.forEach(function(campo){html+='<col class=\"'+escaparHTML(campo.colClass)+'\">';});\r\n          html+=\"<\/colgroup><thead><tr><th>#<\/th><th>SEGMENTO<br>C\u00d3DIGO<\/th>\";\r\n\r\n          datos.campos.forEach(function(campo){\r\n            const thClass=campo.thClass?' class=\"'+escaparHTML(campo.thClass)+'\"':\"\";\r\n            html+=\"<th\"+thClass+\">\"+campo.label+\"<\/th>\";\r\n          });\r\n\r\n          html+=\"<\/tr><\/thead><tbody>\";\r\n\r\n          datos.filas.forEach(function(fila,index){\r\n            html+=\"<tr>\";\r\n            html+='<td class=\"tr-rank\">'+(index+1)+\"<\/td>\";\r\n            html+='<td class=\"tr-sector\" title=\"'+escaparHTML(fila.exposicion)+'\">'+escaparHTML(fila.exposicion)+\"<\/td>\";\r\n\r\n            datos.campos.forEach(function(campo){\r\n              const valor=fila.row.c&&fila.row.c[campo.index]?valorCelda(fila.row.c[campo.index]):\"\";\r\n              const celda=renderValor(campo,valor,fila,datos);\r\n              html+='<td class=\"'+escaparHTML(celda.clase)+'\" style=\"'+escaparHTML(celda.style)+'\" title=\"'+escaparHTML(celda.texto)+'\">'+escaparHTML(celda.texto)+\"<\/td>\";\r\n            });\r\n\r\n            html+=\"<\/tr>\";\r\n          });\r\n\r\n          html+=\"<\/tbody><\/table>\";\r\n          document.getElementById(\"trTabla\").innerHTML=html;\r\n\r\n          const estado=document.getElementById(\"trEstado\");\r\n          if(estado)estado.textContent=datos.filas.length+\" fondos | Orden: \u00cdNDICE FINAL descendente | Color RECOMENDACI\u00d3N FINAL seg\u00fan \u00cdNDICE FINAL\";\r\n\r\n          if(typeof window.__alinearRankingFM === \"function\"){\r\n            setTimeout(window.__alinearRankingFM, 120);\r\n          }\r\n        }catch(error){\r\n          mostrarError(\"Detalle t\u00e9cnico: \"+error.message);\r\n        }\r\n      }\r\n\r\n      function cargarDatos(){\r\n        const separador=PROXY_URL.includes(\"?\")?\"&\":\"?\";\r\n        const url=PROXY_URL+separador+\"cache=\"+Date.now();\r\n\r\n        fetch(url,{cache:\"no-store\"})\r\n          .then(function(res){\r\n            if(!res.ok)throw new Error(\"HTTP \"+res.status);\r\n            return res.json();\r\n          })\r\n          .then(function(payload){\r\n            actualizarFechaHoraCorrida(payload);\r\n            const response=convertirProxyAGviz(payload);\r\n            renderTabla(response);\r\n          })\r\n          .catch(function(error){\r\n            mostrarError(\"No fue posible cargar la hoja desde el proxy WordPress. \"+error.message);\r\n          });\r\n      }\r\n\r\n      cargarDatos();\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4ba7ef0 elementor-widget elementor-widget-html\" data-id=\"4ba7ef0\" 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<!-- =========================================================\r\n     TASANDO.COM | INTRO MATRIZ FONDOS MUTUOS\r\n     VERSI\u00d3N FINAL ALINEADA CON TOP 12\r\n     - fondo azul oscuro conservado\r\n     - alineaci\u00f3n autom\u00e1tica contra #tasando-fondos-top12-v1\r\n     - sin tocar Top 12 ni matriz\r\n     - compatible con Elementor\r\n     ========================================================= -->\r\n\r\n<section id=\"tasando-fm-intro\">\r\n  <style>\r\n    #tasando-fm-intro {\r\n      --tfi-page-width: min(1240px, calc(100vw - 120px));\r\n      --tfi-blue-dark: #0d2347;\r\n      --tfi-blue-mid: #173b76;\r\n      --tfi-green: #69be28;\r\n      --tfi-text: #ffffff;\r\n      --tfi-muted: rgba(255,255,255,0.82);\r\n      --tfi-border: rgba(255,255,255,0.12);\r\n      --tfi-card-bg: rgba(255,255,255,0.08);\r\n      --tfi-card-border: rgba(255,255,255,0.14);\r\n      --tfi-shadow: 0 18px 42px rgba(8, 20, 44, 0.22);\r\n\r\n      width: 100% !important;\r\n      max-width: 100% !important;\r\n      margin: 34px 0 38px 0 !important;\r\n      padding: 0 !important;\r\n      display: block !important;\r\n      clear: both !important;\r\n      float: none !important;\r\n      position: relative !important;\r\n      z-index: 1 !important;\r\n      overflow: visible !important;\r\n      box-sizing: border-box !important;\r\n      font-family: Arial, Helvetica, sans-serif;\r\n    }\r\n\r\n    #tasando-fm-intro,\r\n    #tasando-fm-intro * {\r\n      box-sizing: border-box !important;\r\n    }\r\n\r\n    body .elementor-widget-html:has(#tasando-fm-intro),\r\n    body .elementor-widget-html:has(#tasando-fm-intro) > .elementor-widget-container,\r\n    body .elementor-widget-wrap:has(#tasando-fm-intro),\r\n    body .elementor-column:has(#tasando-fm-intro),\r\n    body .elementor-container:has(#tasando-fm-intro),\r\n    body .e-con:has(#tasando-fm-intro),\r\n    body .e-con-inner:has(#tasando-fm-intro) {\r\n      overflow: visible !important;\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-panel {\r\n      width: var(--tfi-page-width) !important;\r\n      max-width: var(--tfi-page-width) !important;\r\n      margin: 0 auto !important;\r\n      padding: 26px !important;\r\n      border-radius: 24px;\r\n      border: 1px solid var(--tfi-border);\r\n      box-shadow: var(--tfi-shadow);\r\n      position: relative;\r\n      overflow: hidden;\r\n      color: var(--tfi-text);\r\n      transform: none;\r\n\r\n      background:\r\n        radial-gradient(circle at 12% 22%, rgba(105,190,40,0.14) 0%, rgba(105,190,40,0) 24%),\r\n        radial-gradient(circle at 84% 18%, rgba(105,190,40,0.12) 0%, rgba(105,190,40,0) 18%),\r\n        linear-gradient(135deg, #173b76 0%, #10315f 44%, #0d2347 100%);\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-panel::before {\r\n      content: \"\";\r\n      position: absolute;\r\n      inset: 0;\r\n      background-image:\r\n        linear-gradient(rgba(255,255,255,0.035) 1px, transparent 1px),\r\n        linear-gradient(90deg, rgba(255,255,255,0.035) 1px, transparent 1px);\r\n      background-size: 48px 48px;\r\n      opacity: .45;\r\n      pointer-events: none;\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-panel::after {\r\n      content: \"\";\r\n      position: absolute;\r\n      right: -70px;\r\n      top: -70px;\r\n      width: 220px;\r\n      height: 220px;\r\n      border-radius: 50%;\r\n      background: rgba(105,190,40,0.10);\r\n      pointer-events: none;\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-grid {\r\n      position: relative;\r\n      z-index: 1;\r\n      display: grid;\r\n      grid-template-columns: minmax(0, 1.25fr) minmax(320px, 0.75fr);\r\n      gap: 22px;\r\n      align-items: center;\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-kicker {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      gap: 8px;\r\n      padding: 8px 13px;\r\n      border-radius: 999px;\r\n      background: rgba(255,255,255,0.10);\r\n      border: 1px solid rgba(255,255,255,0.14);\r\n      color: #ffffff;\r\n      font-size: 12px;\r\n      font-weight: 900;\r\n      letter-spacing: .2px;\r\n      margin-bottom: 12px;\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-kicker span {\r\n      width: 9px;\r\n      height: 9px;\r\n      border-radius: 50%;\r\n      background: var(--tfi-green);\r\n      box-shadow: 0 0 0 5px rgba(105,190,40,.20);\r\n      flex: 0 0 auto;\r\n    }\r\n\r\n    #tasando-fm-intro h2 {\r\n      margin: 0;\r\n      color: #ffffff;\r\n      font-size: clamp(30px, 3vw, 44px);\r\n      line-height: 1.06;\r\n      font-weight: 950;\r\n      letter-spacing: -0.9px;\r\n      max-width: 860px;\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-lead {\r\n      margin: 14px 0 0 0;\r\n      color: var(--tfi-muted);\r\n      font-size: 14px;\r\n      line-height: 1.62;\r\n      max-width: 820px;\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-cards {\r\n      display: grid;\r\n      gap: 10px;\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-card {\r\n      display: grid;\r\n      grid-template-columns: 38px 1fr;\r\n      gap: 12px;\r\n      align-items: flex-start;\r\n      background: var(--tfi-card-bg);\r\n      border: 1px solid var(--tfi-card-border);\r\n      border-radius: 16px;\r\n      padding: 13px;\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-icon {\r\n      width: 38px;\r\n      height: 38px;\r\n      border-radius: 12px;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      background: rgba(255,255,255,0.14);\r\n      border: 1px solid rgba(255,255,255,0.16);\r\n      color: #ffffff;\r\n      font-size: 16px;\r\n      font-weight: 900;\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-card b {\r\n      display: block;\r\n      color: #ffffff;\r\n      font-size: 13px;\r\n      margin-bottom: 4px;\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-card span {\r\n      display: block;\r\n      color: rgba(255,255,255,0.82);\r\n      font-size: 12.2px;\r\n      line-height: 1.42;\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-legend {\r\n      margin-top: 16px;\r\n      display: flex;\r\n      flex-wrap: wrap;\r\n      gap: 8px;\r\n      align-items: center;\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-chip {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      gap: 7px;\r\n      padding: 8px 12px;\r\n      border-radius: 999px;\r\n      background: rgba(255,255,255,0.10);\r\n      border: 1px solid rgba(255,255,255,0.14);\r\n      color: #ffffff;\r\n      font-size: 11.5px;\r\n      font-weight: 800;\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-dot {\r\n      width: 10px;\r\n      height: 10px;\r\n      border-radius: 50%;\r\n      display: inline-block;\r\n      border: 1px solid rgba(255,255,255,.16);\r\n      flex: 0 0 auto;\r\n    }\r\n\r\n    #tasando-fm-intro .tfi-red   { background: #f2aaa4; }\r\n    #tasando-fm-intro .tfi-white { background: #ffffff; }\r\n    #tasando-fm-intro .tfi-green { background: #9ae3b5; }\r\n\r\n    @media (max-width: 860px) {\r\n      #tasando-fm-intro .tfi-panel {\r\n        width: calc(100vw - 40px) !important;\r\n        max-width: calc(100vw - 40px) !important;\r\n      }\r\n\r\n      #tasando-fm-intro .tfi-grid {\r\n        grid-template-columns: 1fr;\r\n      }\r\n    }\r\n\r\n    @media (max-width: 700px) {\r\n      #tasando-fm-intro {\r\n        margin: 26px 0 26px 0 !important;\r\n      }\r\n\r\n      #tasando-fm-intro .tfi-panel {\r\n        width: calc(100vw - 22px) !important;\r\n        max-width: calc(100vw - 22px) !important;\r\n        padding: 18px !important;\r\n        border-radius: 18px;\r\n      }\r\n\r\n      #tasando-fm-intro h2 {\r\n        font-size: 24px;\r\n      }\r\n\r\n      #tasando-fm-intro .tfi-lead {\r\n        font-size: 13px;\r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <div class=\"tfi-panel\">\r\n    <div class=\"tfi-grid\">\r\n      <div>\r\n        <div class=\"tfi-kicker\"><span><\/span> Fondos mutuos \u00b7 lectura de ciclos<\/div>\r\n\r\n        <h2>Una matriz para observar aceleraci\u00f3n.<\/h2>\r\n\r\n        <p class=\"tfi-lead\">\r\n          Esta vista resume la evoluci\u00f3n reciente de fondos mutuos agrupados por exposici\u00f3n y familia. La lectura se\r\n          centra en las aceleraciones: se\u00f1ales que permiten identificar si un segmento gana fuerza, pierde impulso o\r\n          entra en una fase de transici\u00f3n. La matriz no reemplaza el an\u00e1lisis financiero, pero ayuda a ordenar el\r\n          comportamiento relativo antes de tomar decisiones de inversi\u00f3n.\r\n        <\/p>\r\n\r\n        <div class=\"tfi-legend\">\r\n          <div class=\"tfi-chip\"><span class=\"tfi-dot tfi-green\"><\/span> Verde: se\u00f1al favorable<\/div>\r\n          <div class=\"tfi-chip\"><span class=\"tfi-dot tfi-white\"><\/span> Blanco: zona neutral<\/div>\r\n          <div class=\"tfi-chip\"><span class=\"tfi-dot tfi-red\"><\/span> Rojo: se\u00f1al desfavorable<\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"tfi-cards\">\r\n        <div class=\"tfi-card\">\r\n          <div class=\"tfi-icon\">1<\/div>\r\n          <div>\r\n            <b>Compare segmentos<\/b>\r\n            <span>Revise exposici\u00f3n y familia para distinguir ciclos accionarios, balanceados, liquidez u otros.<\/span>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"tfi-card\">\r\n          <div class=\"tfi-icon\">2<\/div>\r\n          <div>\r\n            <b>Observe continuidad<\/b>\r\n            <span>Una secuencia de verdes o rojos es m\u00e1s informativa que un dato aislado de un solo d\u00eda.<\/span>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"tfi-card\">\r\n          <div class=\"tfi-icon\">3<\/div>\r\n          <div>\r\n            <b>Use criterio de riesgo<\/b>\r\n            <span>Las aceleraciones ayudan a priorizar, pero deben contrastarse con retorno, volatilidad y drawdown.<\/span>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function () {\r\n      function qs(sel) {\r\n        return document.querySelector(sel);\r\n      }\r\n\r\n      function getReferenceBlock() {\r\n        return (\r\n          qs(\"#tasando-fondos-top12-v1 .tft-panel\") ||\r\n          qs(\"#tasando-fondos-top12-v1 .tf-panel\") ||\r\n          qs(\"#tasando-fondos-top12-v1\") ||\r\n          qs(\"#tasando-ranking-fm-ret20\") ||\r\n          qs(\"#tasando-matriz-fm-acc\")\r\n        );\r\n      }\r\n\r\n      function alinearIntroFM() {\r\n        var intro = qs(\"#tasando-fm-intro\");\r\n        var panel = qs(\"#tasando-fm-intro .tfi-panel\");\r\n        var ref = getReferenceBlock();\r\n\r\n        if (!intro || !panel || !ref) return;\r\n\r\n        if (window.innerWidth <= 860) {\r\n          panel.style.width = \"\";\r\n          panel.style.maxWidth = \"\";\r\n          panel.style.transform = \"\";\r\n          return;\r\n        }\r\n\r\n        panel.style.transform = \"\";\r\n        panel.style.width = \"\";\r\n        panel.style.maxWidth = \"\";\r\n\r\n        var refRect = ref.getBoundingClientRect();\r\n\r\n        if (!refRect || refRect.width < 500) return;\r\n\r\n        panel.style.width = refRect.width + \"px\";\r\n        panel.style.maxWidth = refRect.width + \"px\";\r\n\r\n        requestAnimationFrame(function () {\r\n          var panelRect = panel.getBoundingClientRect();\r\n          var delta = refRect.left - panelRect.left;\r\n\r\n          if (Math.abs(delta) > 1) {\r\n            panel.style.transform = \"translateX(\" + delta + \"px)\";\r\n          } else {\r\n            panel.style.transform = \"\";\r\n          }\r\n        });\r\n      }\r\n\r\n      window.addEventListener(\"load\", alinearIntroFM);\r\n      window.addEventListener(\"resize\", alinearIntroFM);\r\n\r\n      setTimeout(alinearIntroFM, 250);\r\n      setTimeout(alinearIntroFM, 800);\r\n      setTimeout(alinearIntroFM, 1600);\r\n\r\n      if (window.MutationObserver) {\r\n        var obs = new MutationObserver(function () {\r\n          clearTimeout(window.__tfiAlignTimer);\r\n          window.__tfiAlignTimer = setTimeout(alinearIntroFM, 120);\r\n        });\r\n\r\n        obs.observe(document.body, {\r\n          childList: true,\r\n          subtree: true\r\n        });\r\n      }\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-046505f elementor-widget elementor-widget-html\" data-id=\"046505f\" 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<!-- =========================================================\r\n     TASANDO.COM | MATRIZ FM ACELERACIONES 20 D\u00cdAS\r\n     VERSI\u00d3N CORREGIDA SIN SUPERPOSICI\u00d3N\r\n     FUENTE PROXY WORDPRESS \/ GOOGLE SHEETS\r\n\r\n     Endpoint:\r\n     \/propiedades\/wp-json\/tasando\/v1\/sheet\/fm-aceleraciones\r\n\r\n     Correcci\u00f3n principal:\r\n     - Se elimina translateY(-75px).\r\n     - Se elimina desplazamiento vertical artificial.\r\n     - La matriz queda en flujo normal bajo el bloque anterior.\r\n     - Se mantiene centrado horizontal.\r\n     ========================================================= -->\r\n\r\n<section id=\"tasando-matriz-fm-acc\">\r\n \r\n <style>\r\n  #tasando-matriz-fm-acc {\r\n    --tm-desktop-width: min(1240px, calc(100vw - 120px));\r\n    --tm-notebook-width: calc(100vw - 48px);\r\n    --tm-panel-bg-1: #eef2f5;\r\n    --tm-panel-bg-2: #e3e8ef;\r\n    --tm-border: #cbd5e1;\r\n    --tm-dark: #111827;\r\n    --tm-text: #0f172a;\r\n    --tm-muted: #475569;\r\n\r\n    --tm-col-sector-w: 24%;\r\n    --tm-col-ret-w: 4%;\r\n    --tm-col-acc-w: 3.6%;\r\n\r\n    --tm-font-header: 8.4px;\r\n    --tm-font-numeros: 8.2px;\r\n    --tm-font-sector: 7.6px;\r\n    --tm-font-ret20: 8.2px;\r\n\r\n    font-family: Arial, Helvetica, sans-serif;\r\n\r\n    width: 100% !important;\r\n    max-width: 100% !important;\r\n\r\n    margin: 34px 0 55px 0 !important;\r\n    padding: 0 !important;\r\n\r\n    color: var(--tm-text);\r\n    background: transparent;\r\n    box-sizing: border-box;\r\n    position: relative !important;\r\n    overflow: visible;\r\n    z-index: 1;\r\n    clear: both !important;\r\n    float: none !important;\r\n    display: block !important;\r\n\r\n    transform: none !important;\r\n    left: auto !important;\r\n    right: auto !important;\r\n  }\r\n\r\n  body .elementor-widget-html:has(#tasando-matriz-fm-acc),\r\n  body .elementor-widget-html:has(#tasando-matriz-fm-acc) > .elementor-widget-container,\r\n  body .elementor-column:has(#tasando-matriz-fm-acc),\r\n  body .elementor-container:has(#tasando-matriz-fm-acc),\r\n  body .elementor-widget-wrap:has(#tasando-matriz-fm-acc),\r\n  body .e-con:has(#tasando-matriz-fm-acc),\r\n  body .e-con-inner:has(#tasando-matriz-fm-acc) {\r\n    width: 100% !important;\r\n    max-width: none !important;\r\n    overflow: visible !important;\r\n    margin-top: 0 !important;\r\n    padding-top: 0 !important;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc * {\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc .tm-panel {\r\n    width: var(--tm-desktop-width) !important;\r\n    max-width: var(--tm-desktop-width) !important;\r\n    margin: 0 auto !important;\r\n\r\n    background: linear-gradient(180deg, var(--tm-panel-bg-1) 0%, var(--tm-panel-bg-2) 100%);\r\n    border: 1px solid var(--tm-border);\r\n    border-radius: 18px;\r\n    padding: 18px;\r\n    box-shadow: 0 14px 34px rgba(15, 23, 42, 0.12);\r\n    position: relative;\r\n    z-index: 1;\r\n    transform: none;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc .tm-head {\r\n    display: flex;\r\n    justify-content: space-between;\r\n    align-items: flex-start;\r\n    gap: 16px;\r\n    margin-bottom: 12px;\r\n    flex-wrap: wrap;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc h3 {\r\n    margin: 0 0 5px 0;\r\n    font-size: 21px;\r\n    line-height: 1.15;\r\n    color: var(--tm-text);\r\n    font-weight: 800;\r\n    letter-spacing: -0.3px;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc .tm-subtitle {\r\n    margin: 0;\r\n    color: var(--tm-muted);\r\n    font-size: 12px;\r\n    line-height: 1.35;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc .tm-badge {\r\n    background: #ffffff;\r\n    border: 1px solid #d7dde6;\r\n    border-radius: 999px;\r\n    padding: 7px 11px;\r\n    font-size: 11px;\r\n    color: var(--tm-muted);\r\n    white-space: nowrap;\r\n    box-shadow: 0 2px 8px rgba(15, 23, 42, 0.06);\r\n  }\r\n\r\n  #tasando-matriz-fm-acc .tm-mobile-controls {\r\n    display: none;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc .tm-wrap {\r\n    width: 100% !important;\r\n    max-width: 100% !important;\r\n    overflow-x: hidden;\r\n    overflow-y: visible;\r\n    border-radius: 12px;\r\n    border: 1px solid var(--tm-border);\r\n    background: #ffffff;\r\n    margin: 0 auto;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc table {\r\n    width: 100% !important;\r\n    min-width: 100% !important;\r\n    table-layout: fixed !important;\r\n    border-collapse: collapse;\r\n    margin: 0 auto;\r\n    background: #ffffff;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc col.tm-col-sector {\r\n    width: var(--tm-col-sector-w) !important;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc col.tm-col-ret {\r\n    width: var(--tm-col-ret-w) !important;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc col.tm-col-acc {\r\n    width: var(--tm-col-acc-w) !important;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc th,\r\n  #tasando-matriz-fm-acc td {\r\n    border-bottom: 1px solid #e2e8f0;\r\n    border-right: 1px solid #edf2f7;\r\n    overflow: hidden;\r\n    text-overflow: clip;\r\n    vertical-align: middle;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc th {\r\n    height: 31px !important;\r\n    padding: 4px 1px !important;\r\n    background: var(--tm-dark);\r\n    color: #ffffff;\r\n    font-size: var(--tm-font-header) !important;\r\n    line-height: 1.05 !important;\r\n    font-weight: 800 !important;\r\n    text-align: center !important;\r\n    white-space: normal !important;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc td {\r\n    padding: 5px 1px !important;\r\n    font-size: var(--tm-font-numeros) !important;\r\n    line-height: 1.08 !important;\r\n    font-weight: 650 !important;\r\n    text-align: center !important;\r\n    white-space: nowrap !important;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc th.tm-fixed-1 {\r\n    text-align: center !important;\r\n    padding-left: 3px !important;\r\n    padding-right: 3px !important;\r\n    background: var(--tm-dark) !important;\r\n    color: #ffffff !important;\r\n    font-size: var(--tm-font-header) !important;\r\n    font-weight: 850 !important;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc td.tm-fixed-1 {\r\n    text-align: left !important;\r\n    padding-left: 7px !important;\r\n    padding-right: 5px !important;\r\n    white-space: normal !important;\r\n    overflow: hidden !important;\r\n    text-overflow: ellipsis !important;\r\n    background: #f8fafc !important;\r\n    color: var(--tm-text) !important;\r\n    font-size: var(--tm-font-sector) !important;\r\n    line-height: 1.03 !important;\r\n    font-weight: 820 !important;\r\n    letter-spacing: 0;\r\n    text-transform: uppercase;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc tbody tr:nth-child(even) td {\r\n    background-color: #f8fafc;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc tbody tr:nth-child(even) td.tm-fixed-1 {\r\n    background: #f1f5f9 !important;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc tbody tr:hover td {\r\n    filter: brightness(0.97);\r\n  }\r\n\r\n  #tasando-matriz-fm-acc .tm-head-ret20 {\r\n    background: #00f000 !important;\r\n    color: #002b00 !important;\r\n    font-size: var(--tm-font-header) !important;\r\n    font-weight: 900 !important;\r\n    padding-left: 1px !important;\r\n    padding-right: 1px !important;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc .tm-ret20 {\r\n    font-size: var(--tm-font-ret20) !important;\r\n    font-weight: 800 !important;\r\n    padding-left: 1px !important;\r\n    padding-right: 1px !important;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc .tm-pos {\r\n    color: #064e3b;\r\n    font-weight: 650 !important;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc .tm-neg {\r\n    color: #7f1d1d;\r\n    font-weight: 650 !important;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc .tm-zero {\r\n    color: #475569;\r\n    font-weight: 600 !important;\r\n    background: #f8fafc;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc .tm-empty {\r\n    color: #94a3b8;\r\n    background: #ffffff;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc .tm-note {\r\n    margin: 9px 0 0 0;\r\n    color: #64748b;\r\n    font-size: 10.8px;\r\n    line-height: 1.35;\r\n  }\r\n\r\n  #tasando-matriz-fm-acc .tm-error {\r\n    background: #fff7ed;\r\n    color: #9a3412;\r\n    border: 1px solid #fed7aa;\r\n    padding: 12px;\r\n    border-radius: 12px;\r\n    font-size: 13px;\r\n    line-height: 1.45;\r\n  }\r\n\r\n  @media (max-width: 1200px) and (min-width: 701px) {\r\n    #tasando-matriz-fm-acc {\r\n      margin-top: 30px !important;\r\n      margin-bottom: 50px !important;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc .tm-panel {\r\n      width: var(--tm-notebook-width) !important;\r\n      max-width: var(--tm-notebook-width) !important;\r\n      padding: 16px;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc th,\r\n    #tasando-matriz-fm-acc td {\r\n      font-size: 7.85px !important;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc td.tm-fixed-1 {\r\n      font-size: 7.4px !important;\r\n      text-align: left !important;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc .tm-ret20 {\r\n      font-size: 7.9px !important;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 700px) {\r\n    #tasando-matriz-fm-acc {\r\n      width: 100% !important;\r\n      max-width: 100% !important;\r\n      margin-left: 0 !important;\r\n      margin-right: 0 !important;\r\n      margin-top: 24px !important;\r\n      margin-bottom: 28px !important;\r\n      transform: none !important;\r\n      padding: 0 12px !important;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc .tm-panel {\r\n      width: 100% !important;\r\n      max-width: 100% !important;\r\n      padding: 14px;\r\n      border-radius: 16px;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc .tm-head {\r\n      display: block;\r\n      margin-bottom: 10px;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc h3 {\r\n      font-size: 18px;\r\n      line-height: 1.2;\r\n      margin-bottom: 6px;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc .tm-subtitle {\r\n      font-size: 12px;\r\n      margin-bottom: 10px;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc .tm-badge {\r\n      display: inline-block;\r\n      font-size: 11px;\r\n      padding: 7px 10px;\r\n      margin-top: 4px;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc .tm-mobile-controls {\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: space-between;\r\n      gap: 8px;\r\n      margin: 10px 0 12px 0;\r\n      padding: 8px;\r\n      background: #e9eef4;\r\n      border: 1px solid var(--tm-border);\r\n      border-radius: 12px;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc .tm-mobile-controls button {\r\n      border: 1px solid var(--tm-border);\r\n      background: #ffffff;\r\n      color: var(--tm-text);\r\n      border-radius: 999px;\r\n      padding: 7px 10px;\r\n      font-size: 11px;\r\n      font-weight: 800;\r\n      cursor: pointer;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc .tm-mobile-controls button:disabled {\r\n      opacity: 0.35;\r\n      cursor: not-allowed;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc .tm-mobile-date {\r\n      font-size: 12px;\r\n      font-weight: 800;\r\n      color: var(--tm-text);\r\n      text-align: center;\r\n      flex: 1;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc .tm-wrap {\r\n      overflow-x: hidden;\r\n      border-radius: 12px;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc table {\r\n      width: 100% !important;\r\n      min-width: 100% !important;\r\n      table-layout: fixed !important;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc col.tm-col-sector {\r\n      width: 46% !important;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc col.tm-col-ret {\r\n      width: 22% !important;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc col.tm-col-acc {\r\n      width: 32% !important;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc th,\r\n    #tasando-matriz-fm-acc td {\r\n      padding: 8px 4px !important;\r\n      font-size: 10px !important;\r\n      line-height: 1.2 !important;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc td.tm-fixed-1 {\r\n      font-size: 8.2px !important;\r\n      font-weight: 850 !important;\r\n      text-align: left !important;\r\n      padding-left: 7px !important;\r\n    }\r\n\r\n    #tasando-matriz-fm-acc .tm-note {\r\n      font-size: 10.5px;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n  (function () {\r\n    function qs(sel) {\r\n      return document.querySelector(sel);\r\n    }\r\n\r\n    function getReferenciaAlineacionMatriz() {\r\n      return (\r\n        qs(\"#tasando-fm-intro .tfi-panel\") ||\r\n        qs(\"#tasando-fondos-top12-v1 .tft-panel\") ||\r\n        qs(\"#tasando-fondos-top12-v1 .tf-panel\") ||\r\n        qs(\"#tasando-fondos-top12-v1\")\r\n      );\r\n    }\r\n\r\n    function alinearMatrizFM() {\r\n      var panel = qs(\"#tasando-matriz-fm-acc .tm-panel\");\r\n      var ref = getReferenciaAlineacionMatriz();\r\n\r\n      if (!panel || !ref) return;\r\n\r\n      if (window.innerWidth <= 700) {\r\n        panel.style.width = \"\";\r\n        panel.style.maxWidth = \"\";\r\n        panel.style.transform = \"\";\r\n        return;\r\n      }\r\n\r\n      panel.style.transform = \"\";\r\n      panel.style.width = \"\";\r\n      panel.style.maxWidth = \"\";\r\n\r\n      var refRect = ref.getBoundingClientRect();\r\n\r\n      if (!refRect || refRect.width < 500) return;\r\n\r\n      panel.style.width = refRect.width + \"px\";\r\n      panel.style.maxWidth = refRect.width + \"px\";\r\n\r\n      requestAnimationFrame(function () {\r\n        var panelRect = panel.getBoundingClientRect();\r\n        var delta = refRect.left - panelRect.left;\r\n\r\n        if (Math.abs(delta) > 1) {\r\n          panel.style.transform = \"translateX(\" + delta + \"px)\";\r\n        } else {\r\n          panel.style.transform = \"\";\r\n        }\r\n      });\r\n    }\r\n\r\n    window.addEventListener(\"load\", alinearMatrizFM);\r\n    window.addEventListener(\"resize\", alinearMatrizFM);\r\n\r\n    setTimeout(alinearMatrizFM, 150);\r\n    setTimeout(alinearMatrizFM, 600);\r\n    setTimeout(alinearMatrizFM, 1400);\r\n    setTimeout(alinearMatrizFM, 2400);\r\n\r\n    if (window.MutationObserver) {\r\n      var obs = new MutationObserver(function () {\r\n        clearTimeout(window.__tmAlignTimer);\r\n        window.__tmAlignTimer = setTimeout(alinearMatrizFM, 120);\r\n      });\r\n\r\n      obs.observe(document.body, {\r\n        childList: true,\r\n        subtree: true\r\n      });\r\n    }\r\n  })();\r\n<\/script>\r\n \r\n \r\n \r\n \r\n \r\n\r\n  <div class=\"tm-panel\">\r\n    <div class=\"tm-head\">\r\n      <div>\r\n        <h3>Matriz de Aceleraciones Fondos Mutuos<\/h3>\r\n        <p id=\"tmSubtitulo\" class=\"tm-subtitle\">\r\n          Vista resumida: segmento codificado, \u00faltimas 20 aceleraciones h\u00e1biles y rentabilidad 20 d\u00edas al final.\r\n        <\/p>\r\n      <\/div>\r\n      <div id=\"tmEstado\" class=\"tm-badge\">Cargando datos...<\/div>\r\n    <\/div>\r\n\r\n    <div id=\"tmMobileControls\" class=\"tm-mobile-controls\">\r\n      <button id=\"tmBtnPrev\" type=\"button\">\u2190 Anterior<\/button>\r\n      <div id=\"tmMobileDate\" class=\"tm-mobile-date\">\u00daltima aceleraci\u00f3n<\/div>\r\n      <button id=\"tmBtnNext\" type=\"button\">Siguiente \u2192<\/button>\r\n    <\/div>\r\n\r\n    <div id=\"tmTabla\" class=\"tm-wrap\">\r\n      <table>\r\n        <tbody>\r\n          <tr>\r\n            <td>Cargando informaci\u00f3n desde Google Sheets...<\/td>\r\n          <\/tr>\r\n        <\/tbody>\r\n      <\/table>\r\n    <\/div>\r\n\r\n    <p class=\"tm-note\">\r\n      Fuente: base de datos interna Tasando.com. Esta matriz muestra c\u00f3digos p\u00fablicos y aceleraciones h\u00e1biles; la \u00faltima columna resume la rentabilidad de los \u00faltimos 20 d\u00edas. El nombre espec\u00edfico de cada fondo se mantiene reservado.\r\n    <\/p>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function () {\r\n      const PROXY_URL = \"\/propiedades\/wp-json\/tasando\/v1\/sheet\/fm-aceleraciones\";\r\n      const NUM_COLUMNAS_ACC = 20;\r\n      const ANIO_FERIADOS = 2026;\r\n      const FERIADOS_MM_DD = new Set([\r\n        \"01-01\", \"03-04\", \"04-04\", \"01-05\", \"21-05\", \"21-06\",\r\n        \"29-06\", \"16-07\", \"15-08\", \"18-09\", \"19-09\", \"12-10\",\r\n        \"31-10\", \"01-11\", \"08-12\", \"25-12\"\r\n      ]);\r\n\r\n      let ultimaRespuesta = null;\r\n      let columnasMoviles = [];\r\n      let indiceMovil = null;\r\n      let eventosConectados = false;\r\n\r\n      function esMovil() {\r\n        return window.matchMedia(\"(max-width: 700px)\").matches;\r\n      }\r\n\r\n      function limpiarTexto(v) {\r\n        if (v === null || v === undefined) return \"\";\r\n        return String(v).trim();\r\n      }\r\n\r\n      function normalizarHeader(v) {\r\n        return limpiarTexto(v)\r\n          .toUpperCase()\r\n          .normalize(\"NFD\")\r\n          .replace(\/[\\u0300-\\u036f]\/g, \"\")\r\n          .replace(\/\\s+\/g, \"\")\r\n          .replace(\/\\.\/g, \"\")\r\n          .replace(\/_\/g, \"\")\r\n          .replace(\/[()]\/g, \"\");\r\n      }\r\n\r\n      function valorCelda(cell) {\r\n        if (cell === null || cell === undefined) return \"\";\r\n        if (typeof cell === \"string\" || typeof cell === \"number\") return limpiarTexto(cell);\r\n        if (cell.f !== undefined && cell.f !== null) return limpiarTexto(cell.f);\r\n        if (cell.v !== undefined && cell.v !== null) return limpiarTexto(cell.v);\r\n        return \"\";\r\n      }\r\n\r\n      function normalizarNumero(valor) {\r\n        let s = limpiarTexto(valor)\r\n          .replace(\"%\", \"\")\r\n          .replace(\/\\s\/g, \"\")\r\n          .replace(\/[^\\d,.\\-]\/g, \"\");\r\n\r\n        if (!s) return null;\r\n\r\n        if (s.includes(\",\") && s.includes(\".\")) {\r\n          if (s.lastIndexOf(\",\") > s.lastIndexOf(\".\")) {\r\n            s = s.replace(\/\\.\/g, \"\").replace(\",\", \".\");\r\n          } else {\r\n            s = s.replace(\/,\/g, \"\");\r\n          }\r\n        } else if (s.includes(\",\")) {\r\n          s = s.replace(\",\", \".\");\r\n        }\r\n\r\n        const n = Number(s);\r\n        return isNaN(n) ? null : n;\r\n      }\r\n\r\n      function formatearPorcentaje(valor) {\r\n        const n = normalizarNumero(valor);\r\n        if (n === null) return limpiarTexto(valor) || \"-\";\r\n        return n.toFixed(1).replace(\".\", \",\") + \"%\";\r\n      }\r\n\r\n      function colorVariacion(valor) {\r\n        const n = normalizarNumero(valor);\r\n\r\n        if (n === null) return { clase: \"tm-empty\", style: \"\" };\r\n        if (n === 0) return { clase: \"tm-zero\", style: \"\" };\r\n\r\n        const intensidad = Math.min(Math.abs(n) \/ 8, 1);\r\n        const alpha = 0.10 + intensidad * 0.38;\r\n\r\n        if (n > 0) {\r\n          return {\r\n            clase: \"tm-pos\",\r\n            style: \"background: rgba(16, 185, 129, \" + alpha.toFixed(2) + \");\"\r\n          };\r\n        }\r\n\r\n        return {\r\n          clase: \"tm-neg\",\r\n          style: \"background: rgba(239, 68, 68, \" + alpha.toFixed(2) + \");\"\r\n        };\r\n      }\r\n\r\n      function escaparHTML(texto) {\r\n        return limpiarTexto(texto)\r\n          .replace(\/&\/g, \"&amp;\")\r\n          .replace(\/<\/g, \"&lt;\")\r\n          .replace(\/>\/g, \"&gt;\")\r\n          .replace(\/\"\/g, \"&quot;\")\r\n          .replace(\/'\/g, \"&#039;\");\r\n      }\r\n\r\n      function mostrarError(mensaje) {\r\n        const estado = document.getElementById(\"tmEstado\");\r\n        const cont = document.getElementById(\"tmTabla\");\r\n\r\n        if (estado) estado.textContent = \"Error de carga\";\r\n\r\n        if (cont) {\r\n          cont.innerHTML =\r\n            '<div class=\"tm-error\">' +\r\n            \"<strong>No fue posible leer la informaci\u00f3n.<\/strong><br>\" +\r\n            escaparHTML(mensaje) +\r\n            \"<br><br>Revise el endpoint del proxy y que la hoja est\u00e9 compartida\/publicada con acceso de lectura.\" +\r\n            \"<\/div>\";\r\n        }\r\n      }\r\n\r\n      function buscarIndice(headers, claves, fallback) {\r\n        const clavesNorm = claves.map(normalizarHeader);\r\n\r\n        for (let i = 0; i < headers.length; i++) {\r\n          if (clavesNorm.includes(normalizarHeader(headers[i].label))) {\r\n            return headers[i].index;\r\n          }\r\n        }\r\n\r\n        return fallback;\r\n      }\r\n\r\n      function esFechaCorta(label) {\r\n        return \/^\\d{1,2}[-\\\/]\\d{1,2}$\/.test(limpiarTexto(label));\r\n      }\r\n\r\n      function normalizarDiaMes(label) {\r\n        const s = limpiarTexto(label).replace(\"\/\", \"-\");\r\n        const partes = s.split(\"-\");\r\n        if (partes.length !== 2) return \"\";\r\n        const dN = Number(partes[0]);\r\n        const mN = Number(partes[1]);\r\n        if (!Number.isFinite(dN) || !Number.isFinite(mN)) return \"\";\r\n        const d = String(dN).padStart(2, \"0\");\r\n        const m = String(mN).padStart(2, \"0\");\r\n        return d + \"-\" + m;\r\n      }\r\n\r\n      function esDiaHabilEtiqueta(label) {\r\n        if (!esFechaCorta(label)) return false;\r\n\r\n        const dm = normalizarDiaMes(label);\r\n        if (!dm) return false;\r\n\r\n        if (FERIADOS_MM_DD.has(dm)) return false;\r\n\r\n        const partes = dm.split(\"-\");\r\n        const dia = Number(partes[0]);\r\n        const mes = Number(partes[1]);\r\n        const fecha = new Date(ANIO_FERIADOS, mes - 1, dia);\r\n\r\n        if (\r\n          fecha.getFullYear() !== ANIO_FERIADOS ||\r\n          fecha.getMonth() !== mes - 1 ||\r\n          fecha.getDate() !== dia\r\n        ) {\r\n          return false;\r\n        }\r\n\r\n        const dow = fecha.getDay();\r\n        return dow !== 0 && dow !== 6;\r\n      }\r\n\r\n      function convertirProxyAGviz(payload) {\r\n        if (!payload || payload.ok !== true || !Array.isArray(payload.headers) || !Array.isArray(payload.rows)) {\r\n          throw new Error(\"El proxy no devolvi\u00f3 estructura v\u00e1lida: se esperaban headers y rows.\");\r\n        }\r\n\r\n        const cols = payload.headers.map(function (h, index) {\r\n          return {\r\n            id: \"C\" + index,\r\n            label: limpiarTexto(h),\r\n            type: \"string\"\r\n          };\r\n        });\r\n\r\n        const rows = payload.rows.map(function (row) {\r\n          const c = cols.map(function (_, index) {\r\n            const value = row && row[index] !== undefined && row[index] !== null ? limpiarTexto(row[index]) : \"\";\r\n            return { v: value, f: value };\r\n          });\r\n          return { c: c };\r\n        });\r\n\r\n        return {\r\n          table: {\r\n            cols: cols,\r\n            rows: rows\r\n          },\r\n          _proxy: payload\r\n        };\r\n      }\r\n\r\n      function actualizarBotonesMoviles() {\r\n        const btnPrev = document.getElementById(\"tmBtnPrev\");\r\n        const btnNext = document.getElementById(\"tmBtnNext\");\r\n        const fecha = document.getElementById(\"tmMobileDate\");\r\n\r\n        if (!btnPrev || !btnNext || !fecha || !columnasMoviles.length) return;\r\n\r\n        btnPrev.disabled = indiceMovil <= 0;\r\n        btnNext.disabled = indiceMovil >= columnasMoviles.length - 1;\r\n        fecha.textContent = columnasMoviles[indiceMovil].label;\r\n      }\r\n\r\n      function construirDatos(response) {\r\n        const cols = response.table.cols || [];\r\n        const rows = response.table.rows || [];\r\n\r\n        const headers = cols.map(function (col, index) {\r\n          return {\r\n            index: index,\r\n            label: limpiarTexto(col.label || col.id || \"\")\r\n          };\r\n        });\r\n\r\n        const indiceSector = buscarIndice(\r\n          headers,\r\n          [\r\n            \"SEGMENTO \/ CODIGO\",\r\n            \"SEGMENTO \/ C\u00d3DIGO\",\r\n            \"SEGMENTO CODIGO\",\r\n            \"SEGMENTO C\u00d3DIGO\",\r\n            \"SEGMENTO_CODIGO\",\r\n            \"SEGMENTO_C\u00d3DIGO\",\r\n            \"CODIGO PUBLICO FM\",\r\n            \"C\u00d3DIGO P\u00daBLICO FM\",\r\n            \"CODIGO_PUBLICO_FM\",\r\n            \"C\u00d3DIGO_PUBLICO_FM\"\r\n          ],\r\n          null\r\n        );\r\n\r\n        if (indiceSector === null || indiceSector === undefined) {\r\n          const muestraHeaders = headers.map(function (h) { return h.label; }).filter(Boolean).slice(0, 60).join(\" | \");\r\n          throw new Error(\r\n            \"No se detect\u00f3 la columna p\u00fablica SEGMENTO \/ CODIGO. \" +\r\n            \"Por seguridad no se usar\u00e1 la primera columna f\u00edsica de la Sheet, porque puede contener NOMBRE FONDO. \" +\r\n            \"Encabezados recibidos: \" + muestraHeaders\r\n          );\r\n        }\r\n\r\n        const indiceRet20 = buscarIndice(\r\n          headers,\r\n          [\r\n            \"RET20\", \"RET 20\", \"RENT20\", \"RENT 20\", \"RENT(20)\", \"RENT (20)\",\r\n            \"RENTABILIDAD 20\", \"RENTABILIDAD 20 DIAS\", \"RENTABILIDAD 20 D\u00cdAS\",\r\n            \"RENT ULT 20 DIAS\", \"RENT ULT 20 D\u00cdAS\"\r\n          ],\r\n          null\r\n        );\r\n\r\n        const indicesExcluidos = new Set([indiceSector]);\r\n\r\n        if (indiceRet20 !== null && indiceRet20 !== undefined) {\r\n          indicesExcluidos.add(indiceRet20);\r\n        }\r\n\r\n        const columnasAcc = headers\r\n          .filter(function (h) {\r\n            if (indicesExcluidos.has(h.index)) return false;\r\n            if (!h.label) return false;\r\n            return esFechaCorta(h.label) && esDiaHabilEtiqueta(h.label);\r\n          })\r\n          .slice(-NUM_COLUMNAS_ACC);\r\n\r\n        const filasValidas = rows\r\n          .map(function (row) {\r\n            const sector = row.c && row.c[indiceSector] ? valorCelda(row.c[indiceSector]) : \"\";\r\n            return {\r\n              sector: sector,\r\n              row: row\r\n            };\r\n          })\r\n          .filter(function (r) {\r\n            return limpiarTexto(r.sector) !== \"\";\r\n          });\r\n\r\n        return {\r\n          indiceSector: indiceSector,\r\n          indiceRet20: indiceRet20,\r\n          columnasAcc: columnasAcc,\r\n          filas: filasValidas,\r\n          headers: headers\r\n        };\r\n      }\r\n\r\n      function renderTabla(response) {\r\n        try {\r\n          if (!response || !response.table || !response.table.cols || !response.table.rows) {\r\n            mostrarError(\"La respuesta no tiene estructura v\u00e1lida.\");\r\n            return;\r\n          }\r\n\r\n          ultimaRespuesta = response;\r\n          const datos = construirDatos(response);\r\n\r\n          if (!datos.columnasAcc.length) {\r\n            const muestraHeaders = (response.table.cols || [])\r\n              .map(function (c) { return limpiarTexto(c.label || c.id || \"\"); })\r\n              .filter(Boolean)\r\n              .slice(0, 40)\r\n              .join(\" | \");\r\n\r\n            mostrarError(\r\n              \"No se detectaron columnas de aceleraci\u00f3n h\u00e1biles con formato fecha, por ejemplo 15-05. \" +\r\n              \"Se excluyen s\u00e1bados, domingos y feriados configurados. \" +\r\n              \"Encabezados recibidos: \" + muestraHeaders\r\n            );\r\n            return;\r\n          }\r\n\r\n          if (!datos.filas.length) {\r\n            mostrarError(\"No se detectaron filas con datos.\");\r\n            return;\r\n          }\r\n\r\n          let columnasRender;\r\n\r\n          if (esMovil()) {\r\n            columnasMoviles = datos.columnasAcc;\r\n\r\n            if (indiceMovil === null || indiceMovil >= columnasMoviles.length) {\r\n              indiceMovil = columnasMoviles.length - 1;\r\n            }\r\n\r\n            columnasRender = [columnasMoviles[indiceMovil]];\r\n          } else {\r\n            columnasRender = datos.columnasAcc;\r\n          }\r\n\r\n          let html = \"\";\r\n\r\n          html += \"<table>\";\r\n          html += \"<colgroup>\";\r\n          html += '<col class=\"tm-col-sector\">';\r\n\r\n          columnasRender.forEach(function () {\r\n            html += '<col class=\"tm-col-acc\">';\r\n          });\r\n\r\n          if (datos.indiceRet20 !== null && datos.indiceRet20 !== undefined) {\r\n            html += '<col class=\"tm-col-ret\">';\r\n          }\r\n\r\n          html += \"<\/colgroup>\";\r\n\r\n          html += \"<thead><tr>\";\r\n          html += '<th class=\"tm-fixed-1\">SEGMENTO<br>C\u00d3DIGO<\/th>';\r\n\r\n          columnasRender.forEach(function (col) {\r\n            html += \"<th>\" + escaparHTML(col.label) + \"<\/th>\";\r\n          });\r\n\r\n          if (datos.indiceRet20 !== null && datos.indiceRet20 !== undefined) {\r\n            html += '<th class=\"tm-head-ret20\">RENT ULT<br>20 D\u00cdAS<\/th>';\r\n          }\r\n\r\n          html += \"<\/tr><\/thead>\";\r\n          html += \"<tbody>\";\r\n\r\n          datos.filas.forEach(function (fila) {\r\n            html += \"<tr>\";\r\n\r\n            html +=\r\n              '<td class=\"tm-fixed-1\" title=\"' +\r\n              escaparHTML(fila.sector) +\r\n              '\">' +\r\n              escaparHTML(fila.sector) +\r\n              \"<\/td>\";\r\n\r\n            columnasRender.forEach(function (col) {\r\n              const valor = valorCelda(fila.row.c[col.index]);\r\n              const color = colorVariacion(valor);\r\n\r\n              html +=\r\n                '<td class=\"' +\r\n                color.clase +\r\n                '\" style=\"' +\r\n                color.style +\r\n                '\">' +\r\n                escaparHTML(formatearPorcentaje(valor)) +\r\n                \"<\/td>\";\r\n            });\r\n\r\n            if (datos.indiceRet20 !== null && datos.indiceRet20 !== undefined) {\r\n              const retValor = valorCelda(fila.row.c[datos.indiceRet20]);\r\n              const retColor = colorVariacion(retValor);\r\n\r\n              html +=\r\n                '<td class=\"tm-ret20 ' +\r\n                retColor.clase +\r\n                '\" style=\"' +\r\n                retColor.style +\r\n                '\">' +\r\n                escaparHTML(formatearPorcentaje(retValor)) +\r\n                \"<\/td>\";\r\n            }\r\n\r\n            html += \"<\/tr>\";\r\n          });\r\n\r\n          html += \"<\/tbody><\/table>\";\r\n\r\n          document.getElementById(\"tmTabla\").innerHTML = html;\r\n\r\n          const estado = document.getElementById(\"tmEstado\");\r\n          if (estado) {\r\n            const desde = columnasRender[0].label;\r\n            const hasta = columnasRender[columnasRender.length - 1].label;\r\n\r\n            estado.textContent = esMovil()\r\n              ? \"Mostrando aceleraci\u00f3n: \" + hasta\r\n              : \"20 aceleraciones h\u00e1biles: \" + desde + \" a \" + hasta + \" | RENT 20 al final\";\r\n          }\r\n\r\n          const subtitulo = document.getElementById(\"tmSubtitulo\");\r\n          if (subtitulo) {\r\n            subtitulo.textContent = esMovil()\r\n              ? \"Vista m\u00f3vil: segmento codificado, retorno 20 d\u00edas y aceleraci\u00f3n seleccionada.\"\r\n              : \"Vista resumida: segmento codificado, \u00faltimas 20 aceleraciones h\u00e1biles y rentabilidad 20 d\u00edas al final.\";\r\n          }\r\n\r\n          actualizarBotonesMoviles();\r\n        } catch (error) {\r\n          mostrarError(\"Detalle t\u00e9cnico: \" + error.message);\r\n        }\r\n      }\r\n\r\n      function conectarEventos() {\r\n        if (eventosConectados) return;\r\n        eventosConectados = true;\r\n\r\n        const btnPrev = document.getElementById(\"tmBtnPrev\");\r\n        const btnNext = document.getElementById(\"tmBtnNext\");\r\n\r\n        if (btnPrev) {\r\n          btnPrev.addEventListener(\"click\", function () {\r\n            if (!columnasMoviles.length || indiceMovil <= 0) return;\r\n            indiceMovil--;\r\n            renderTabla(ultimaRespuesta);\r\n          });\r\n        }\r\n\r\n        if (btnNext) {\r\n          btnNext.addEventListener(\"click\", function () {\r\n            if (!columnasMoviles.length || indiceMovil >= columnasMoviles.length - 1) return;\r\n            indiceMovil++;\r\n            renderTabla(ultimaRespuesta);\r\n          });\r\n        }\r\n\r\n        let timer = null;\r\n\r\n        window.addEventListener(\"resize\", function () {\r\n          clearTimeout(timer);\r\n          timer = setTimeout(function () {\r\n            if (ultimaRespuesta) renderTabla(ultimaRespuesta);\r\n          }, 250);\r\n        });\r\n      }\r\n\r\n      function cargarDatos() {\r\n        const separador = PROXY_URL.includes(\"?\") ? \"&\" : \"?\";\r\n        const url = PROXY_URL + separador + \"cache=\" + Date.now();\r\n\r\n        fetch(url, { cache: \"no-store\" })\r\n          .then(function (res) {\r\n            if (!res.ok) throw new Error(\"HTTP \" + res.status);\r\n            return res.json();\r\n          })\r\n          .then(function (payload) {\r\n            const response = convertirProxyAGviz(payload);\r\n            renderTabla(response);\r\n          })\r\n          .catch(function (error) {\r\n            mostrarError(\"No fue posible cargar la hoja desde el proxy WordPress. \" + error.message);\r\n          });\r\n      }\r\n\r\n      conectarEventos();\r\n      cargarDatos();\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aa5cfe3 elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"aa5cfe3\" 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<!-- =========================================================\r\n     TASANDO.COM | DICCIONARIO EJECUTIVO MATRIZ FM\r\n     VERSI\u00d3N CENTRADA \/ ENCAPSULADA\r\n     - no usa 100vw\r\n     - no modifica bloques anteriores\r\n     - se alinea con ranking\/matriz si existen\r\n     ========================================================= -->\r\n\r\n<section id=\"tasando-diccionario-fm-ejecutivo\">\r\n  <style>\r\n    #tasando-diccionario-fm-ejecutivo{\r\n      --td-page-width:min(1240px, calc(100vw - 120px));\r\n      --td-blue:#102a54;\r\n      --td-green:#69be28;\r\n      --td-text:#0f172a;\r\n      --td-muted:#475569;\r\n      --td-border:#d7e0ea;\r\n      --td-shadow:0 14px 34px rgba(15,23,42,.08);\r\n      --td-radius:18px;\r\n\r\n      width:100% !important;\r\n      max-width:100% !important;\r\n      margin:10px 0 42px 0 !important;\r\n      padding:0 !important;\r\n      box-sizing:border-box !important;\r\n      font-family:Arial, Helvetica, sans-serif;\r\n      color:var(--td-text);\r\n      background:transparent !important;\r\n      clear:both !important;\r\n      float:none !important;\r\n      position:relative !important;\r\n      z-index:1 !important;\r\n      overflow:visible !important;\r\n      transform:none !important;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo,\r\n    #tasando-diccionario-fm-ejecutivo *{\r\n      box-sizing:border-box !important;\r\n    }\r\n\r\n    body .elementor-widget-html:has(#tasando-diccionario-fm-ejecutivo),\r\n    body .elementor-widget-html:has(#tasando-diccionario-fm-ejecutivo) > .elementor-widget-container,\r\n    body .elementor-column:has(#tasando-diccionario-fm-ejecutivo),\r\n    body .elementor-container:has(#tasando-diccionario-fm-ejecutivo),\r\n    body .elementor-widget-wrap:has(#tasando-diccionario-fm-ejecutivo),\r\n    body .e-con:has(#tasando-diccionario-fm-ejecutivo),\r\n    body .e-con-inner:has(#tasando-diccionario-fm-ejecutivo){\r\n      width:100% !important;\r\n      max-width:none !important;\r\n      overflow:visible !important;\r\n      margin-top:0 !important;\r\n      padding-top:0 !important;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-wrap{\r\n      width:var(--td-page-width) !important;\r\n      max-width:var(--td-page-width) !important;\r\n      margin:0 auto !important;\r\n      background:linear-gradient(180deg,#f8fafc 0%,#eef3f8 100%);\r\n      border:1px solid var(--td-border);\r\n      border-radius:22px;\r\n      box-shadow:var(--td-shadow);\r\n      padding:22px;\r\n      position:relative;\r\n      transform:none;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-head{\r\n      display:flex;\r\n      justify-content:space-between;\r\n      align-items:flex-start;\r\n      gap:18px;\r\n      flex-wrap:wrap;\r\n      margin-bottom:18px;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo h3{\r\n      margin:0 0 7px 0;\r\n      color:var(--td-blue);\r\n      font-size:24px;\r\n      line-height:1.12;\r\n      font-weight:900;\r\n      letter-spacing:-.4px;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-head p{\r\n      margin:0;\r\n      color:var(--td-muted);\r\n      font-size:13px;\r\n      line-height:1.55;\r\n      max-width:860px;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-badge{\r\n      display:inline-flex;\r\n      align-items:center;\r\n      gap:8px;\r\n      padding:8px 12px;\r\n      border-radius:999px;\r\n      background:#ffffff;\r\n      border:1px solid var(--td-border);\r\n      color:var(--td-blue);\r\n      font-size:11.5px;\r\n      font-weight:900;\r\n      white-space:nowrap;\r\n      box-shadow:0 4px 12px rgba(15,23,42,.04);\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-badge:before{\r\n      content:\"\";\r\n      width:8px;\r\n      height:8px;\r\n      border-radius:50%;\r\n      background:var(--td-green);\r\n      box-shadow:0 0 0 5px rgba(105,190,40,.12);\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-intro{\r\n      background:#ffffff;\r\n      border:1px solid var(--td-border);\r\n      border-radius:16px;\r\n      padding:15px 16px;\r\n      color:#334155;\r\n      font-size:13px;\r\n      line-height:1.58;\r\n      margin-bottom:18px;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-intro strong{\r\n      color:var(--td-blue);\r\n      font-weight:900;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-section-title{\r\n      display:flex;\r\n      align-items:center;\r\n      gap:10px;\r\n      margin:0 0 12px 0;\r\n      color:var(--td-blue);\r\n      font-size:17px;\r\n      font-weight:900;\r\n      letter-spacing:-.2px;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-section-title span{\r\n      display:inline-flex;\r\n      align-items:center;\r\n      justify-content:center;\r\n      width:26px;\r\n      height:26px;\r\n      border-radius:9px;\r\n      background:var(--td-blue);\r\n      color:#ffffff;\r\n      font-size:12px;\r\n      font-weight:900;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-grid{\r\n      display:grid;\r\n      grid-template-columns:repeat(4,minmax(0,1fr));\r\n      gap:10px;\r\n      margin-bottom:18px;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-card{\r\n      background:#ffffff;\r\n      border:1px solid var(--td-border);\r\n      border-radius:15px;\r\n      padding:13px;\r\n      min-height:116px;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-card b{\r\n      display:inline-flex;\r\n      align-items:center;\r\n      width:max-content;\r\n      max-width:100%;\r\n      padding:5px 8px;\r\n      border-radius:999px;\r\n      background:#edf4fb;\r\n      color:var(--td-blue);\r\n      font-size:11.5px;\r\n      font-weight:900;\r\n      margin-bottom:8px;\r\n      line-height:1.15;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-card.metric b{\r\n      background:#fff7ed;\r\n      color:#9a3412;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-card.acc b{\r\n      background:#ecfdf5;\r\n      color:#065f46;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-card.risk b{\r\n      background:#fee2e2;\r\n      color:#991b1b;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-card p{\r\n      margin:0;\r\n      color:#526173;\r\n      font-size:12px;\r\n      line-height:1.48;\r\n    }\r\n\r\n    #tasando-diccionario-fm-ejecutivo .td-note{\r\n      margin-top:16px;\r\n      padding:13px 14px;\r\n      border-radius:14px;\r\n      background:#eaf4ff;\r\n      border:1px solid #c8dff5;\r\n      color:#38546f;\r\n      font-size:12.5px;\r\n      line-height:1.5;\r\n    }\r\n\r\n    @media(max-width:1200px){\r\n      #tasando-diccionario-fm-ejecutivo{\r\n        --td-page-width:calc(100vw - 48px);\r\n      }\r\n\r\n      #tasando-diccionario-fm-ejecutivo .td-grid{\r\n        grid-template-columns:repeat(3,minmax(0,1fr));\r\n      }\r\n    }\r\n\r\n    @media(max-width:760px){\r\n      #tasando-diccionario-fm-ejecutivo{\r\n        --td-page-width:calc(100vw - 24px);\r\n        margin:10px 0 28px 0 !important;\r\n      }\r\n\r\n      #tasando-diccionario-fm-ejecutivo .td-wrap{\r\n        padding:16px;\r\n        border-radius:18px;\r\n      }\r\n\r\n      #tasando-diccionario-fm-ejecutivo .td-grid{\r\n        grid-template-columns:1fr;\r\n      }\r\n\r\n      #tasando-diccionario-fm-ejecutivo h3{\r\n        font-size:20px;\r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <div class=\"td-wrap\">\r\n    <div class=\"td-head\">\r\n      <div>\r\n        <h3>Diccionario ejecutivo de la matriz de fondos mutuos<\/h3>\r\n        <p>\r\n          Esta gu\u00eda resume solo las variables visibles en la tabla ejecutiva: exposici\u00f3n, familia, fecha, m\u00e9tricas de retorno,\r\n          aceleraci\u00f3n, persistencia positiva, volatilidad, drawdown y evoluci\u00f3n hist\u00f3rica de aceleraciones.\r\n        <\/p>\r\n      <\/div>\r\n      <div class=\"td-badge\">Variables visibles<\/div>\r\n    <\/div>\r\n\r\n    <div class=\"td-intro\">\r\n      La matriz permite observar el comportamiento reciente de distintos segmentos de fondos mutuos. La lectura debe combinar\r\n      <strong>retorno<\/strong>, <strong>aceleraci\u00f3n<\/strong>, <strong>persistencia positiva<\/strong>, <strong>volatilidad<\/strong>,\r\n      <strong>drawdown<\/strong> y la continuidad de las columnas hist\u00f3ricas por fecha.\r\n    <\/div>\r\n\r\n    <h4 class=\"td-section-title\"><span>1<\/span> Identificaci\u00f3n del fondo<\/h4>\r\n\r\n    <div class=\"td-grid\">\r\n      <div class=\"td-card\">\r\n        <b>EXPOSICI\u00d3N DEL FM<\/b>\r\n        <p>Segmento econ\u00f3mico, geogr\u00e1fico o tem\u00e1tico al que est\u00e1 expuesto el fondo. Permite comparar mercados o grupos similares.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"td-card\">\r\n        <b>FAMILIA<\/b>\r\n        <p>Categor\u00eda general del fondo, como accionario, balanceado, renta fija, liquidez u otra clasificaci\u00f3n relevante.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"td-card\">\r\n        <b>FECHA<\/b>\r\n        <p>Fecha del \u00faltimo dato utilizado para calcular las m\u00e9tricas que aparecen en la fila del fondo o segmento.<\/p>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <h4 class=\"td-section-title\"><span>2<\/span> M\u00e9tricas ejecutivas<\/h4>\r\n\r\n    <div class=\"td-grid\">\r\n      <div class=\"td-card metric\">\r\n        <b>RET 20<\/b>\r\n        <p>Retorno acumulado en una ventana larga de 20 observaciones. Resume desempe\u00f1o reciente de mayor amplitud.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"td-card metric\">\r\n        <b>ACC 20<\/b>\r\n        <p>Aceleraci\u00f3n en ventana larga. Indica si el fondo gana o pierde impulso considerando el tramo amplio de an\u00e1lisis.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"td-card metric\">\r\n        <b>% POS 5<\/b>\r\n        <p>Porcentaje de observaciones positivas en la ventana corta de 5 datos. Mide persistencia favorable reciente.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"td-card metric\">\r\n        <b>RET 5<\/b>\r\n        <p>Retorno reciente de corto plazo. Permite observar la direcci\u00f3n t\u00e1ctica m\u00e1s inmediata del fondo o segmento.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"td-card metric\">\r\n        <b>ACC 5<\/b>\r\n        <p>Aceleraci\u00f3n de corto plazo. Ayuda a detectar cambios r\u00e1pidos de impulso, mejora o deterioro reciente.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"td-card risk\">\r\n        <b>VOL 5<\/b>\r\n        <p>Volatilidad reciente calculada en ventana corta. Una mayor volatilidad implica mayor variabilidad del comportamiento.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"td-card risk\">\r\n        <b>DD 20<\/b>\r\n        <p>Drawdown en ventana de 20 observaciones. Mide la ca\u00edda relativa m\u00e1xima reciente desde un punto alto.<\/p>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <h4 class=\"td-section-title\"><span>3<\/span> Columnas hist\u00f3ricas de aceleraci\u00f3n<\/h4>\r\n\r\n    <div class=\"td-grid\">\r\n      <div class=\"td-card acc\">\r\n        <b>12-05, 13-05, ...<\/b>\r\n        <p>Cada columna con formato d\u00eda-mes representa la aceleraci\u00f3n calculada para esa fecha de medici\u00f3n.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"td-card acc\">\r\n        <b>Lectura verde<\/b>\r\n        <p>Valores positivos sugieren mejora de impulso o comportamiento favorable respecto de mediciones anteriores.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"td-card risk\">\r\n        <b>Lectura roja<\/b>\r\n        <p>Valores negativos sugieren p\u00e9rdida de impulso, deterioro reciente o fase de transici\u00f3n desfavorable.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"td-card\">\r\n        <b>Continuidad<\/b>\r\n        <p>M\u00e1s importante que un dato aislado es la secuencia: varios verdes o rojos consecutivos entregan mejor se\u00f1al de ciclo.<\/p>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"td-note\">\r\n      Lectura pr\u00e1ctica: un segmento con RET positivo, ACC positiva, alto % POS, baja VOL relativa y DD controlado muestra una se\u00f1al m\u00e1s consistente. Si las \u00faltimas columnas hist\u00f3ricas cambian a rojo, la se\u00f1al debe leerse con cautela aunque el retorno acumulado siga siendo positivo.\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function(){\r\n      function qs(sel){ return document.querySelector(sel); }\r\n\r\n      function getReferenciaDiccionarioFM(){\r\n        return (\r\n          qs(\"#tasando-ranking-fm-ret20 .tr-panel\") ||\r\n          qs(\"#tasando-matriz-fm-acc .tm-panel\") ||\r\n          qs(\"#tasando-fm-intro .tfi-panel\") ||\r\n          qs(\"#tasando-fondos-top12-v1 .tft-panel\") ||\r\n          qs(\"#tasando-fondos-top12-v1 .tf-panel\") ||\r\n          qs(\"#tasando-fondos-top12-v1\")\r\n        );\r\n      }\r\n\r\n      function alinearDiccionarioFM(){\r\n        var wrap = qs(\"#tasando-diccionario-fm-ejecutivo .td-wrap\");\r\n        var ref = getReferenciaDiccionarioFM();\r\n\r\n        if(!wrap || !ref) return;\r\n\r\n        if(window.innerWidth <= 760){\r\n          wrap.style.width = \"\";\r\n          wrap.style.maxWidth = \"\";\r\n          wrap.style.transform = \"\";\r\n          return;\r\n        }\r\n\r\n        wrap.style.transform = \"\";\r\n        wrap.style.width = \"\";\r\n        wrap.style.maxWidth = \"\";\r\n\r\n        var refRect = ref.getBoundingClientRect();\r\n        if(!refRect || refRect.width < 500) return;\r\n\r\n        wrap.style.width = refRect.width + \"px\";\r\n        wrap.style.maxWidth = refRect.width + \"px\";\r\n\r\n        requestAnimationFrame(function(){\r\n          var wrapRect = wrap.getBoundingClientRect();\r\n          var delta = refRect.left - wrapRect.left;\r\n\r\n          if(Math.abs(delta) > 1){\r\n            wrap.style.transform = \"translateX(\" + delta + \"px)\";\r\n          }else{\r\n            wrap.style.transform = \"\";\r\n          }\r\n        });\r\n      }\r\n\r\n      window.addEventListener(\"load\", alinearDiccionarioFM);\r\n      window.addEventListener(\"resize\", alinearDiccionarioFM);\r\n\r\n      setTimeout(alinearDiccionarioFM, 150);\r\n      setTimeout(alinearDiccionarioFM, 600);\r\n      setTimeout(alinearDiccionarioFM, 1400);\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-824b844 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"824b844\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-bd0e93c\" data-id=\"bd0e93c\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-c3f19fe elementor-widget elementor-widget-html\" data-id=\"c3f19fe\" 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<!-- =========================================================\r\n     FOOTER TASANDO CUSTOM - GRILLA 6 CELDAS\r\n     VERSI\u00d3N FINAL ALINEADA\r\n     - Se alinea con el bloque superior real\r\n     - No usa 100vw\r\n     - No usa margin-left: calc(50% - 50vw)\r\n     - No modifica matriz, ranking ni diccionario\r\n     - Compatible con Elementor\r\n     ========================================================= -->\r\n\r\n<section id=\"tasando-footer-custom\" aria-label=\"Footer Tasando\">\r\n  <style>\r\n    #tasando-footer-custom {\r\n      --tf-page-width: min(1240px, calc(100vw - 120px));\r\n      --tf-blue: #102a54;\r\n      --tf-blue-2: #1f3763;\r\n      --tf-green: #69be28;\r\n      --tf-text: #ffffff;\r\n      --tf-muted: rgba(255,255,255,0.86);\r\n      --tf-line: rgba(255,255,255,0.16);\r\n      --tf-card: rgba(255,255,255,0.97);\r\n      --tf-shadow: 0 14px 28px rgba(0,0,0,0.15);\r\n\r\n      display: block !important;\r\n      width: 100% !important;\r\n      max-width: 100% !important;\r\n      margin: 34px auto 0 auto !important;\r\n      padding: 0 !important;\r\n      font-family: Arial, Helvetica, sans-serif;\r\n      color: var(--tf-text);\r\n      box-sizing: border-box !important;\r\n      clear: both !important;\r\n      float: none !important;\r\n      overflow: visible !important;\r\n      position: relative !important;\r\n      left: auto !important;\r\n      right: auto !important;\r\n      transform: none !important;\r\n      background: transparent !important;\r\n      z-index: 1 !important;\r\n    }\r\n\r\n    #tasando-footer-custom,\r\n    #tasando-footer-custom * {\r\n      box-sizing: border-box !important;\r\n    }\r\n\r\n    \/* Fuerza que Elementor no estrangule el footer *\/\r\n    body .elementor-section:has(#tasando-footer-custom),\r\n    body .elementor-top-section:has(#tasando-footer-custom),\r\n    body .elementor-container:has(#tasando-footer-custom),\r\n    body .elementor-column:has(#tasando-footer-custom),\r\n    body .elementor-widget-wrap:has(#tasando-footer-custom),\r\n    body .elementor-widget-html:has(#tasando-footer-custom),\r\n    body .elementor-widget-html:has(#tasando-footer-custom) > .elementor-widget-container,\r\n    body .e-con:has(#tasando-footer-custom),\r\n    body .e-con-inner:has(#tasando-footer-custom) {\r\n      width: 100% !important;\r\n      max-width: none !important;\r\n      min-width: 0 !important;\r\n      margin-left: auto !important;\r\n      margin-right: auto !important;\r\n      padding-left: 0 !important;\r\n      padding-right: 0 !important;\r\n      left: auto !important;\r\n      right: auto !important;\r\n      transform: none !important;\r\n      align-self: stretch !important;\r\n      overflow: visible !important;\r\n    }\r\n\r\n    body .elementor-column:has(#tasando-footer-custom) {\r\n      flex: 0 0 100% !important;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-wrap {\r\n      width: var(--tf-page-width) !important;\r\n      max-width: var(--tf-page-width) !important;\r\n      margin: 0 auto !important;\r\n      padding: 38px 26px 24px 26px;\r\n      border-radius: 22px 22px 0 0;\r\n      background:\r\n        radial-gradient(circle at 12% 18%, rgba(105,190,40,0.14), transparent 26%),\r\n        radial-gradient(circle at 82% 22%, rgba(255,255,255,0.08), transparent 24%),\r\n        linear-gradient(135deg, rgba(16,42,84,0.98), rgba(31,55,99,0.96));\r\n      overflow: hidden;\r\n      position: relative;\r\n      transform: none;\r\n      box-shadow: 0 18px 44px rgba(8,20,44,0.18);\r\n    }\r\n\r\n    #tasando-footer-custom .tf-container {\r\n      width: 100%;\r\n      max-width: none;\r\n      margin: 0 auto;\r\n      padding: 0;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-main {\r\n      display: grid;\r\n      grid-template-columns: minmax(250px, 0.62fr) minmax(0, 2.38fr);\r\n      gap: 28px;\r\n      align-items: stretch;\r\n      width: 100%;\r\n      min-width: 0;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-info {\r\n      min-width: 0;\r\n      display: flex;\r\n      flex-direction: column;\r\n      justify-content: center;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-info h3 {\r\n      margin: 0 0 12px 0;\r\n      color: #ffffff;\r\n      font-size: clamp(22px, 2vw, 30px);\r\n      line-height: 1.12;\r\n      letter-spacing: -0.3px;\r\n      font-weight: 950;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-info p {\r\n      margin: 0 0 18px 0;\r\n      color: var(--tf-muted);\r\n      font-size: 14px;\r\n      line-height: 1.6;\r\n      max-width: 380px;\r\n      font-weight: 650;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-phone {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      width: max-content;\r\n      color: #ffffff;\r\n      font-size: 16px;\r\n      line-height: 1.1;\r\n      font-weight: 950;\r\n      text-decoration: none;\r\n      transition: color 0.18s ease;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-phone:hover {\r\n      color: var(--tf-green);\r\n    }\r\n\r\n    #tasando-footer-custom .tf-logos {\r\n      display: grid;\r\n      grid-template-columns: repeat(3, minmax(0, 1fr));\r\n      gap: 14px;\r\n      align-items: stretch;\r\n      width: 100%;\r\n      min-width: 0;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-logo-card {\r\n      width: 100%;\r\n      min-width: 0;\r\n      min-height: 118px;\r\n      padding: 14px;\r\n      border-radius: 16px;\r\n      background: var(--tf-card);\r\n      border: 1px solid rgba(255,255,255,0.75);\r\n      box-shadow: var(--tf-shadow);\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      overflow: hidden;\r\n      cursor: default;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-logo-card img {\r\n      display: block;\r\n      width: auto;\r\n      max-width: 100%;\r\n      height: auto;\r\n      object-fit: contain;\r\n      border-radius: 8px;\r\n      pointer-events: none;\r\n      user-select: none;\r\n      -webkit-user-drag: none;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-logo-card-usm img {\r\n      max-height: 78px;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-logo-card-uc img {\r\n      max-height: 78px;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-logo-card-pucv img {\r\n      max-height: 82px;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-logo-card-ifrs img {\r\n      max-height: 64px;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-logo-card-inn img {\r\n      max-height: 76px;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-logo-card-iso img {\r\n      max-height: 86px;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-bottom {\r\n      margin-top: 26px;\r\n      padding-top: 20px;\r\n      border-top: 1px solid var(--tf-line);\r\n      display: grid;\r\n      grid-template-columns: 1fr auto;\r\n      gap: 22px;\r\n      align-items: center;\r\n      width: 100%;\r\n      min-width: 0;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-copy {\r\n      color: rgba(255,255,255,0.92);\r\n      font-size: 13px;\r\n      line-height: 1.45;\r\n      font-weight: 650;\r\n      min-width: 0;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-copy a {\r\n      color: var(--tf-green);\r\n      font-weight: 950;\r\n      text-decoration: none;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-copy a:hover {\r\n      text-decoration: underline;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-social {\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: flex-end;\r\n      gap: 13px;\r\n      flex-wrap: wrap;\r\n      min-width: 0;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-social a {\r\n      width: 30px;\r\n      height: 30px;\r\n      display: inline-flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      border-radius: 999px;\r\n      text-decoration: none;\r\n      transition: transform 0.18s ease, background 0.18s ease;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-social a:hover {\r\n      transform: translateY(-2px);\r\n      background: rgba(255,255,255,0.12);\r\n    }\r\n\r\n    #tasando-footer-custom .tf-social svg {\r\n      width: 18px;\r\n      height: 18px;\r\n      display: block;\r\n      fill: currentColor;\r\n    }\r\n\r\n    #tasando-footer-custom .tf-facebook { color: #1877f2; }\r\n    #tasando-footer-custom .tf-whatsapp { color: #25d366; }\r\n    #tasando-footer-custom .tf-linkedin { color: #0a66c2; }\r\n    #tasando-footer-custom .tf-instagram { color: #e4405f; }\r\n    #tasando-footer-custom .tf-youtube { color: #ff0000; }\r\n\r\n    @media (max-width: 1200px) {\r\n      #tasando-footer-custom {\r\n        margin-top: 30px !important;\r\n      }\r\n\r\n      #tasando-footer-custom .tf-wrap {\r\n        width: calc(100vw - 48px) !important;\r\n        max-width: calc(100vw - 48px) !important;\r\n        padding: 36px 24px 24px 24px;\r\n      }\r\n    }\r\n\r\n    @media (max-width: 980px) {\r\n      #tasando-footer-custom .tf-main {\r\n        grid-template-columns: 1fr;\r\n        gap: 26px;\r\n      }\r\n\r\n      #tasando-footer-custom .tf-info p {\r\n        max-width: 100%;\r\n      }\r\n\r\n      #tasando-footer-custom .tf-logos {\r\n        grid-template-columns: repeat(3, minmax(0, 1fr));\r\n      }\r\n\r\n      #tasando-footer-custom .tf-logo-card {\r\n        min-height: 118px;\r\n        padding: 14px;\r\n      }\r\n    }\r\n\r\n    @media (max-width: 720px) {\r\n      #tasando-footer-custom {\r\n        margin-top: 28px !important;\r\n      }\r\n\r\n      #tasando-footer-custom .tf-wrap {\r\n        width: calc(100vw - 24px) !important;\r\n        max-width: calc(100vw - 24px) !important;\r\n        padding: 32px 18px 24px 18px;\r\n        border-radius: 18px 18px 0 0;\r\n      }\r\n\r\n      #tasando-footer-custom .tf-logos {\r\n        grid-template-columns: 1fr;\r\n        gap: 14px;\r\n      }\r\n\r\n      #tasando-footer-custom .tf-logo-card {\r\n        min-height: 132px;\r\n        padding: 18px;\r\n        border-radius: 18px;\r\n      }\r\n\r\n      #tasando-footer-custom .tf-logo-card-usm img,\r\n      #tasando-footer-custom .tf-logo-card-uc img,\r\n      #tasando-footer-custom .tf-logo-card-pucv img,\r\n      #tasando-footer-custom .tf-logo-card-ifrs img,\r\n      #tasando-footer-custom .tf-logo-card-inn img,\r\n      #tasando-footer-custom .tf-logo-card-iso img {\r\n        max-height: 88px;\r\n      }\r\n\r\n      #tasando-footer-custom .tf-bottom {\r\n        grid-template-columns: 1fr;\r\n        gap: 16px;\r\n      }\r\n\r\n      #tasando-footer-custom .tf-social {\r\n        justify-content: flex-start;\r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <div class=\"tf-wrap\">\r\n    <div class=\"tf-container\">\r\n      <div class=\"tf-main\">\r\n        <div class=\"tf-info\">\r\n          <h3>Est\u00e1ndares Nacionales e Internacionales<\/h3>\r\n          <p>\r\n            Tasaciones y an\u00e1lisis t\u00e9cnicos con enfoque profesional, respaldo metodol\u00f3gico\r\n            y criterios consistentes para distintos tipos de activos y encargos.\r\n          <\/p>\r\n          <a class=\"tf-phone\" href=\"tel:+56997878034\">+56 99 7878 034<\/a>\r\n        <\/div>\r\n\r\n        <div class=\"tf-logos\" aria-label=\"Referencias t\u00e9cnicas y est\u00e1ndares profesionales\">\r\n          <div class=\"tf-logo-card tf-logo-card-usm\">\r\n            <img src=\"https:\/\/portalusm.helen.cl\/img\/logo_usm.png\" alt=\"Universidad T\u00e9cnica Federico Santa Mar\u00eda\" loading=\"lazy\" decoding=\"async\">\r\n          <\/div>\r\n\r\n          <div class=\"tf-logo-card tf-logo-card-uc\">\r\n            <img src=\"https:\/\/co-lab-research.net\/wp-content\/uploads\/2018\/03\/logo-puc-chile.jpg?w=620\" alt=\"Pontificia Universidad Cat\u00f3lica de Chile\" loading=\"lazy\" decoding=\"async\">\r\n          <\/div>\r\n\r\n          <div class=\"tf-logo-card tf-logo-card-pucv\">\r\n            <img src=\"https:\/\/www.pucv.cl\/uuaa\/site\/artic\/20160808\/imag\/foto_0000000120160808123016.png\" alt=\"Pontificia Universidad Cat\u00f3lica de Valpara\u00edso\" loading=\"lazy\" decoding=\"async\">\r\n          <\/div>\r\n\r\n          <div class=\"tf-logo-card tf-logo-card-ifrs\">\r\n            <img src=\"https:\/\/pmpartners.es\/wp-content\/uploads\/2024\/04\/international-financial-reporting-standards-ifrs-foundation-vector-logo-removebg-preview.png\" alt=\"IFRS - International Financial Reporting Standards\" loading=\"lazy\" decoding=\"async\">\r\n          <\/div>\r\n\r\n          <div class=\"tf-logo-card tf-logo-card-inn\">\r\n            <img src=\"https:\/\/managementsystems.world\/media\/images\/logos\/instituto_nacional_de_normalizacion_inn\" alt=\"Instituto Nacional de Normalizaci\u00f3n\" loading=\"lazy\" decoding=\"async\">\r\n          <\/div>\r\n\r\n          <div class=\"tf-logo-card tf-logo-card-iso\">\r\n            <img src=\"https:\/\/q-bo.org\/wp-content\/uploads\/logo-normas-iso-1000x828.png\" alt=\"Logo ISO\" loading=\"lazy\" decoding=\"async\">\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"tf-bottom\">\r\n        <div class=\"tf-copy\">\r\n          Copyright \u00a9 2026 Tasando.com - Powered by\r\n          <a href=\"https:\/\/www.superchat.cl\" target=\"_blank\" rel=\"noopener\">www.superchat.cl<\/a>\r\n        <\/div>\r\n\r\n        <nav class=\"tf-social\" aria-label=\"Redes sociales Tasando\">\r\n          <a class=\"tf-facebook\" href=\"https:\/\/www.facebook.com\/profile.php?id=100084838899398\" target=\"_blank\" rel=\"noopener\" aria-label=\"Facebook Tasando\">\r\n            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M14 8.5V6.9c0-.8.2-1.3 1.3-1.3H17V2.2c-.8-.1-1.7-.2-2.6-.2-2.7 0-4.6 1.7-4.6 4.7v1.8H6.8V12h3v10H14V12h2.9l.5-3.5H14z\"\/><\/svg>\r\n          <\/a>\r\n\r\n          <a class=\"tf-whatsapp\" href=\"https:\/\/api.whatsapp.com\/send?phone=56997878034\" target=\"_blank\" rel=\"noopener\" aria-label=\"WhatsApp Tasando\">\r\n            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M20.5 3.5A11.8 11.8 0 0 0 12.1 0C5.6 0 .3 5.3.3 11.8c0 2.1.5 4.1 1.6 5.9L0 24l6.5-1.7a11.8 11.8 0 0 0 5.6 1.4h.1c6.5 0 11.8-5.3 11.8-11.8 0-3.2-1.2-6.1-3.5-8.4z\"\/><\/svg>\r\n          <\/a>\r\n\r\n          <a class=\"tf-linkedin\" href=\"https:\/\/www.linkedin.com\/company\/101137461\" target=\"_blank\" rel=\"noopener\" aria-label=\"LinkedIn Tasando\">\r\n            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M4.98 3.5C4.98 4.88 3.86 6 2.5 6S0 4.88 0 3.5 1.12 1 2.5 1s2.48 1.12 2.48 2.5zM.3 8h4.4v15H.3V8zm7.1 0h4.2v2.1h.1c.6-1.1 2.1-2.4 4.3-2.4 4.6 0 5.4 3 5.4 6.9V23H17v-7.4c0-1.8 0-4-2.5-4s-2.9 1.9-2.9 3.9V23H7.4V8z\"\/><\/svg>\r\n          <\/a>\r\n\r\n          <a class=\"tf-instagram\" href=\"https:\/\/www.instagram.com\/tasando_com\/\" target=\"_blank\" rel=\"noopener\" aria-label=\"Instagram Tasando\">\r\n            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M7.5 2h9A5.5 5.5 0 0 1 22 7.5v9a5.5 5.5 0 0 1-5.5 5.5h-9A5.5 5.5 0 0 1 2 16.5v-9A5.5 5.5 0 0 1 7.5 2zm0 2A3.5 3.5 0 0 0 4 7.5v9A3.5 3.5 0 0 0 7.5 20h9a3.5 3.5 0 0 0 3.5-3.5v-9A3.5 3.5 0 0 0 16.5 4h-9zM12 7a5 5 0 1 1 0 10 5 5 0 0 1 0-10zm0 2a3 3 0 1 0 0 6 3 3 0 0 0 0-6z\"\/><\/svg>\r\n          <\/a>\r\n\r\n          <a class=\"tf-youtube\" href=\"https:\/\/www.youtube.com\/@TASANDO_COM\" target=\"_blank\" rel=\"noopener\" aria-label=\"YouTube Tasando\">\r\n            <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M23.5 6.2s-.2-1.7-.9-2.4c-.9-.9-1.9-.9-2.4-1C16.8 2.5 12 2.5 12 2.5h0s-4.8 0-8.2.3c-.5.1-1.5.1-2.4 1C.7 4.5.5 6.2.5 6.2S.2 8.2.2 10.2v1.9c0 2 .3 4 .3 4s.2 1.7.9 2.4c.9.9 2.1.9 2.6 1 1.9.2 8 .3 8 .3s4.8 0 8.2-.3c.5-.1 1.5-.1 2.4-1 .7-.7.9-2.4.9-2.4s.3-2 .3-4v-1.9c0-2-.3-4-.3-4zM9.7 14.5v-7l6.3 3.5-6.3 3.5z\"\/><\/svg>\r\n          <\/a>\r\n        <\/nav>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function () {\r\n      function qs(sel) {\r\n        return document.querySelector(sel);\r\n      }\r\n\r\n      function getReferenciaFooterTasando() {\r\n        return (\r\n          qs(\"#tasando-diccionario-fm-ejecutivo .td-wrap\") ||\r\n          qs(\"#tasando-ranking-fm-ret20 .tr-panel\") ||\r\n          qs(\"#tasando-matriz-fm-acc .tm-panel\") ||\r\n          qs(\"#tasando-fm-intro .tfi-panel\")\r\n        );\r\n      }\r\n\r\n      function alinearFooterTasando() {\r\n        var wrap = qs(\"#tasando-footer-custom .tf-wrap\");\r\n        var ref = getReferenciaFooterTasando();\r\n\r\n        if (!wrap || !ref) return;\r\n\r\n        if (window.innerWidth <= 720) {\r\n          wrap.style.width = \"\";\r\n          wrap.style.maxWidth = \"\";\r\n          wrap.style.transform = \"\";\r\n          return;\r\n        }\r\n\r\n        wrap.style.transform = \"\";\r\n        wrap.style.width = \"\";\r\n        wrap.style.maxWidth = \"\";\r\n\r\n        var refRect = ref.getBoundingClientRect();\r\n        if (!refRect || refRect.width < 500) return;\r\n\r\n        wrap.style.width = refRect.width + \"px\";\r\n        wrap.style.maxWidth = refRect.width + \"px\";\r\n\r\n        requestAnimationFrame(function () {\r\n          var wrapRect = wrap.getBoundingClientRect();\r\n          var delta = refRect.left - wrapRect.left;\r\n\r\n          if (Math.abs(delta) > 1) {\r\n            wrap.style.transform = \"translateX(\" + delta + \"px)\";\r\n          } else {\r\n            wrap.style.transform = \"\";\r\n          }\r\n        });\r\n      }\r\n\r\n      window.addEventListener(\"load\", alinearFooterTasando);\r\n      window.addEventListener(\"resize\", alinearFooterTasando);\r\n\r\n      setTimeout(alinearFooterTasando, 150);\r\n      setTimeout(alinearFooterTasando, 600);\r\n      setTimeout(alinearFooterTasando, 1400);\r\n      setTimeout(alinearFooterTasando, 2400);\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Ranking visual de fondos Top fondos mutuos Lectura visual generada desde el recomendador interno de fondos mutuos Tasando.com. Fecha corrida cargando&#8230; Categor\u00eda cargando&#8230; Criterio cargando&#8230; Cargando Top fondos&#8230; D\u00f3nde no invertir Fondos a evitar Contraste visual de los fondos con peor lectura relativa seg\u00fan el recomendador interno de Tasando.com. Fecha corrida cargando&#8230; Categor\u00eda cargando&#8230; Criterio [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-13122","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Fondos Mutuos - Tasando.com<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tasando.com\/propiedades\/fondos-mutuos\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fondos Mutuos - Tasando.com\" \/>\n<meta property=\"og:description\" content=\"Ranking visual de fondos Top fondos mutuos Lectura visual generada desde el recomendador interno de fondos mutuos Tasando.com. Fecha corrida cargando&#8230; Categor\u00eda cargando&#8230; Criterio cargando&#8230; Cargando Top fondos&#8230; D\u00f3nde no invertir Fondos a evitar Contraste visual de los fondos con peor lectura relativa seg\u00fan el recomendador interno de Tasando.com. Fecha corrida cargando&#8230; Categor\u00eda cargando&#8230; Criterio [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tasando.com\/propiedades\/fondos-mutuos\/\" \/>\n<meta property=\"og:site_name\" content=\"Tasaciones\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-01T13:15:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/portalusm.helen.cl\/img\/logo_usm.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Tiempo estimado de lectura\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/fondos-mutuos\\\/\",\"url\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/fondos-mutuos\\\/\",\"name\":\"Fondos Mutuos - Tasando.com\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/fondos-mutuos\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/fondos-mutuos\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/portalusm.helen.cl\\\/img\\\/logo_usm.png\",\"datePublished\":\"2026-06-07T18:08:41+00:00\",\"dateModified\":\"2026-09-01T13:15:24+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/fondos-mutuos\\\/#breadcrumb\"},\"inLanguage\":\"es-CL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/tasando.com\\\/propiedades\\\/fondos-mutuos\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es-CL\",\"@id\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/fondos-mutuos\\\/#primaryimage\",\"url\":\"https:\\\/\\\/portalusm.helen.cl\\\/img\\\/logo_usm.png\",\"contentUrl\":\"https:\\\/\\\/portalusm.helen.cl\\\/img\\\/logo_usm.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/fondos-mutuos\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Fondos Mutuos\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/#website\",\"url\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/\",\"name\":\"Tasando.com\",\"description\":\"Bienes Ra\u00edces y Activos\",\"publisher\":{\"@id\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/#organization\"},\"alternateName\":\"Tasando\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es-CL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/#organization\",\"name\":\"Tasando.com\",\"alternateName\":\"Tasando\",\"url\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es-CL\",\"@id\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/logo_tasando.jpeg\",\"contentUrl\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/wp-content\\\/uploads\\\/2024\\\/05\\\/logo_tasando.jpeg\",\"width\":248,\"height\":133,\"caption\":\"Tasando.com\"},\"image\":{\"@id\":\"https:\\\/\\\/tasando.com\\\/propiedades\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Fondos Mutuos - Tasando.com","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tasando.com\/propiedades\/fondos-mutuos\/","og_locale":"es_ES","og_type":"article","og_title":"Fondos Mutuos - Tasando.com","og_description":"Ranking visual de fondos Top fondos mutuos Lectura visual generada desde el recomendador interno de fondos mutuos Tasando.com. Fecha corrida cargando&#8230; Categor\u00eda cargando&#8230; Criterio cargando&#8230; Cargando Top fondos&#8230; D\u00f3nde no invertir Fondos a evitar Contraste visual de los fondos con peor lectura relativa seg\u00fan el recomendador interno de Tasando.com. Fecha corrida cargando&#8230; Categor\u00eda cargando&#8230; Criterio [&hellip;]","og_url":"https:\/\/tasando.com\/propiedades\/fondos-mutuos\/","og_site_name":"Tasaciones","article_modified_time":"2026-09-01T13:15:24+00:00","og_image":[{"url":"https:\/\/portalusm.helen.cl\/img\/logo_usm.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Tiempo estimado de lectura":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/tasando.com\/propiedades\/fondos-mutuos\/","url":"https:\/\/tasando.com\/propiedades\/fondos-mutuos\/","name":"Fondos Mutuos - Tasando.com","isPartOf":{"@id":"https:\/\/tasando.com\/propiedades\/#website"},"primaryImageOfPage":{"@id":"https:\/\/tasando.com\/propiedades\/fondos-mutuos\/#primaryimage"},"image":{"@id":"https:\/\/tasando.com\/propiedades\/fondos-mutuos\/#primaryimage"},"thumbnailUrl":"https:\/\/portalusm.helen.cl\/img\/logo_usm.png","datePublished":"2026-06-07T18:08:41+00:00","dateModified":"2026-09-01T13:15:24+00:00","breadcrumb":{"@id":"https:\/\/tasando.com\/propiedades\/fondos-mutuos\/#breadcrumb"},"inLanguage":"es-CL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tasando.com\/propiedades\/fondos-mutuos\/"]}]},{"@type":"ImageObject","inLanguage":"es-CL","@id":"https:\/\/tasando.com\/propiedades\/fondos-mutuos\/#primaryimage","url":"https:\/\/portalusm.helen.cl\/img\/logo_usm.png","contentUrl":"https:\/\/portalusm.helen.cl\/img\/logo_usm.png"},{"@type":"BreadcrumbList","@id":"https:\/\/tasando.com\/propiedades\/fondos-mutuos\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/tasando.com\/propiedades\/"},{"@type":"ListItem","position":2,"name":"Fondos Mutuos"}]},{"@type":"WebSite","@id":"https:\/\/tasando.com\/propiedades\/#website","url":"https:\/\/tasando.com\/propiedades\/","name":"Tasando.com","description":"Bienes Ra\u00edces y Activos","publisher":{"@id":"https:\/\/tasando.com\/propiedades\/#organization"},"alternateName":"Tasando","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/tasando.com\/propiedades\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es-CL"},{"@type":"Organization","@id":"https:\/\/tasando.com\/propiedades\/#organization","name":"Tasando.com","alternateName":"Tasando","url":"https:\/\/tasando.com\/propiedades\/","logo":{"@type":"ImageObject","inLanguage":"es-CL","@id":"https:\/\/tasando.com\/propiedades\/#\/schema\/logo\/image\/","url":"https:\/\/tasando.com\/propiedades\/wp-content\/uploads\/2024\/05\/logo_tasando.jpeg","contentUrl":"https:\/\/tasando.com\/propiedades\/wp-content\/uploads\/2024\/05\/logo_tasando.jpeg","width":248,"height":133,"caption":"Tasando.com"},"image":{"@id":"https:\/\/tasando.com\/propiedades\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/tasando.com\/propiedades\/wp-json\/wp\/v2\/pages\/13122","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tasando.com\/propiedades\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tasando.com\/propiedades\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tasando.com\/propiedades\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tasando.com\/propiedades\/wp-json\/wp\/v2\/comments?post=13122"}],"version-history":[{"count":268,"href":"https:\/\/tasando.com\/propiedades\/wp-json\/wp\/v2\/pages\/13122\/revisions"}],"predecessor-version":[{"id":15621,"href":"https:\/\/tasando.com\/propiedades\/wp-json\/wp\/v2\/pages\/13122\/revisions\/15621"}],"wp:attachment":[{"href":"https:\/\/tasando.com\/propiedades\/wp-json\/wp\/v2\/media?parent=13122"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}