{"id":4545,"date":"2026-10-31T15:32:38","date_gmt":"2026-10-31T15:32:38","guid":{"rendered":"https:\/\/literalmex.com\/?page_id=4545"},"modified":"2026-10-31T15:32:39","modified_gmt":"2026-10-31T15:32:39","slug":"4545-2","status":"publish","type":"page","link":"https:\/\/literalmex.com\/index.php\/4545-2\/","title":{"rendered":""},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>\n&lt;!--\nLITERAL M\u00c9XICO\nEspecial de investigaci\u00f3n: INE y Guadalupe Taddei\nInsertar en un bloque HTML personalizado de WordPress.\n-->\n\n&lt;div id=\"lm-especial\">\n\n  &lt;header class=\"lm-cabecera\">\n    &lt;div class=\"lm-contenedor lm-cabecera-interior\">\n      &lt;a class=\"lm-marca\" href=\"\/\" aria-label=\"Volver a Literal M\u00e9xico\">\n        &lt;img id=\"lm-logo\" alt=\"Literal M\u00e9xico\" hidden>\n        &lt;span id=\"lm-logo-texto\">\n          &lt;strong>LITERAL&lt;span>M\u00c9XICO&lt;\/span>&lt;\/strong>\n          &lt;small>PERIODISMO Y AN\u00c1LISIS&lt;\/small>\n        &lt;\/span>\n      &lt;\/a>\n\n      &lt;a class=\"lm-inicio\" href=\"\/\">\n        &lt;span>\u2302&lt;\/span> Inicio\n      &lt;\/a>\n    &lt;\/div>\n  &lt;\/header>\n\n  &lt;nav class=\"lm-nav\" aria-label=\"Secciones del especial\">\n    &lt;div class=\"lm-contenedor lm-nav-interior\">\n      &lt;button class=\"lm-tab activo\" data-tema=\"todos\">\n        Toda la cobertura\n      &lt;\/button>\n      &lt;button class=\"lm-tab\" data-tema=\"taddei\">\n        Guadalupe Taddei\n      &lt;\/button>\n      &lt;button class=\"lm-tab\" data-tema=\"ine\">\n        INE\n      &lt;\/button>\n      &lt;button class=\"lm-tab\" data-tema=\"proveedor\">\n        Jos\u00e9 Alfredo Hern\u00e1ndez\n      &lt;\/button>\n      &lt;a href=\"#lm-buscador\" class=\"lm-nav-buscar\">\u2315 Buscar&lt;\/a>\n    &lt;\/div>\n  &lt;\/nav>\n\n  &lt;section class=\"lm-hero\">\n    &lt;div class=\"lm-contenedor\">\n      &lt;div class=\"lm-eyebrow\">\n        &lt;span class=\"lm-punto\">&lt;\/span>\n        LITERAL M\u00c9XICO \/ ESPECIAL DE INVESTIGACI\u00d3N\n      &lt;\/div>\n\n      &lt;h1>EL INE&lt;br>&lt;em>BAJO LA LUPA&lt;\/em>&lt;\/h1>\n\n      &lt;p class=\"lm-subtitulo\">\n        Guadalupe Taddei, contratos, proveedores y poder pol\u00edtico.\n        Una cobertura period\u00edstica sobre las controversias,\n        investigaciones y decisiones que rodean al \u00e1rbitro electoral.\n      &lt;\/p>\n\n      &lt;div class=\"lm-hero-pie\">\n        &lt;span>INVESTIGACI\u00d3N \u2022 AN\u00c1LISIS \u2022 OPINI\u00d3N&lt;\/span>\n        &lt;a href=\"#lm-publicaciones\">Explorar cobertura \u2193&lt;\/a>\n      &lt;\/div>\n    &lt;\/div>\n  &lt;\/section>\n\n  &lt;section class=\"lm-contenedor lm-contenido\" id=\"lm-publicaciones\">\n\n    &lt;div class=\"lm-barra-seccion\">\n      &lt;div>\n        &lt;span class=\"lm-kicker\">ARCHIVO PERIOD\u00cdSTICO&lt;\/span>\n        &lt;h2 id=\"lm-titulo-seccion\">Toda la cobertura&lt;\/h2>\n      &lt;\/div>\n      &lt;div class=\"lm-actualizacion\">\n        PUBLICACIONES DE LITERAL M\u00c9XICO\n        &lt;span id=\"lm-contador\">Cargando...&lt;\/span>\n      &lt;\/div>\n    &lt;\/div>\n\n    &lt;div class=\"lm-herramientas\" id=\"lm-buscador\">\n      &lt;label class=\"lm-campo-busqueda\">\n        &lt;span aria-hidden=\"true\">\u2315&lt;\/span>\n        &lt;input\n          type=\"search\"\n          id=\"lm-search\"\n          placeholder=\"Buscar noticias, nombres o investigaciones...\"\n          aria-label=\"Buscar en el especial\">\n      &lt;\/label>\n\n      &lt;select id=\"lm-orden\" aria-label=\"Ordenar noticias\">\n        &lt;option value=\"desc\">M\u00e1s recientes primero&lt;\/option>\n        &lt;option value=\"asc\">M\u00e1s antiguas primero&lt;\/option>\n      &lt;\/select>\n    &lt;\/div>\n\n    &lt;div id=\"lm-estado\" role=\"status\" aria-live=\"polite\">\n      Consultando publicaciones...\n    &lt;\/div>\n\n    &lt;div id=\"lm-destacada\">&lt;\/div>\n\n    &lt;div class=\"lm-encabezado-lista\" id=\"lm-lista-titulo\" hidden>\n      &lt;h3>M\u00e1s noticias y an\u00e1lisis&lt;\/h3>\n      &lt;span>EL ARCHIVO&lt;\/span>\n    &lt;\/div>\n\n    &lt;div class=\"lm-grid\" id=\"lm-articulos\">&lt;\/div>\n\n    &lt;div class=\"lm-cargar\">\n      &lt;button id=\"lm-mas\" type=\"button\" hidden>\n        Cargar m\u00e1s publicaciones \u2193\n      &lt;\/button>\n    &lt;\/div>\n  &lt;\/section>\n\n  &lt;section class=\"lm-franja\">\n    &lt;div class=\"lm-contenedor lm-franja-interior\">\n      &lt;div>\n        &lt;span class=\"lm-kicker\">PERIODISMO Y AN\u00c1LISIS&lt;\/span>\n        &lt;h2>El poder debe rendir cuentas.&lt;\/h2>\n        &lt;p>\n          Informaci\u00f3n, contexto y an\u00e1lisis sobre las instituciones\n          p\u00fablicas, los procesos electorales y la vida democr\u00e1tica.\n        &lt;\/p>\n      &lt;\/div>\n      &lt;a href=\"\/\">Volver a Literal M\u00e9xico \u2197&lt;\/a>\n    &lt;\/div>\n  &lt;\/section>\n\n  &lt;footer class=\"lm-footer\">\n    &lt;div class=\"lm-contenedor lm-footer-interior\">\n      &lt;strong>LITERAL M\u00c9XICO&lt;\/strong>\n      &lt;span>Periodismo y an\u00e1lisis&lt;\/span>\n      &lt;a href=\"\/\">Portada principal \u2191&lt;\/a>\n    &lt;\/div>\n  &lt;\/footer>\n\n&lt;\/div>\n\n&lt;style>\n\/* ===== AISLAMIENTO DEL DISE\u00d1O ===== *\/\n\n#lm-especial {\n  --lm-rojo: #c51f32;\n  --lm-negro: #111722;\n  --lm-gris: #596171;\n  --lm-borde: #e2e5e9;\n  --lm-fondo: #f5f6f8;\n\n  font-family: Arial, Helvetica, sans-serif;\n  color: var(--lm-negro);\n  background: #fff;\n  width: 100%;\n  line-height: 1.5;\n  font-size: 16px;\n}\n\n#lm-especial *,\n#lm-especial *::before,\n#lm-especial *::after {\n  box-sizing: border-box;\n}\n\n#lm-especial a { text-decoration: none; }\n#lm-especial button,\n#lm-especial input,\n#lm-especial select { font: inherit; }\n\n#lm-especial button { cursor: pointer; }\n\n#lm-especial .lm-contenedor {\n  width: min(1240px, 92%);\n  margin-inline: auto;\n}\n\n\/* CABECERA *\/\n\n#lm-especial .lm-cabecera {\n  background: #111722;\n  color: white;\n}\n\n#lm-especial .lm-cabecera-interior {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  min-height: 92px;\n  gap: 24px;\n}\n\n#lm-especial .lm-marca {\n  color: white;\n  display: inline-flex;\n  align-items: center;\n}\n\n#lm-especial #lm-logo {\n  max-width: 250px;\n  max-height: 68px;\n  width: auto;\n  height: auto;\n  object-fit: contain;\n}\n\n#lm-especial #lm-logo-texto {\n  display: flex;\n  flex-direction: column;\n  line-height: 1.05;\n}\n\n#lm-especial #lm-logo-texto strong {\n  font-size: 28px;\n  letter-spacing: -1.2px;\n  color: white;\n}\n\n#lm-especial #lm-logo-texto strong span {\n  color: #ed3d4f;\n}\n\n#lm-especial #lm-logo-texto small {\n  font-size: 9px;\n  letter-spacing: 3px;\n  margin-top: 7px;\n  color: #aab4c4;\n}\n\n#lm-especial .lm-inicio {\n  border: 1px solid #465063;\n  padding: 9px 16px;\n  border-radius: 6px;\n  color: #fff;\n  font-size: 13px;\n  font-weight: bold;\n}\n\n#lm-especial .lm-inicio span {\n  font-size: 22px;\n  vertical-align: middle;\n}\n\n\/* NAVEGACI\u00d3N *\/\n\n#lm-especial .lm-nav {\n  background: #202937;\n  position: relative;\n  z-index: 3;\n}\n\n#lm-especial .lm-nav-interior {\n  display: flex;\n  align-items: stretch;\n  overflow-x: auto;\n  scrollbar-width: thin;\n}\n\n#lm-especial .lm-tab,\n#lm-especial .lm-nav-buscar {\n  border: 0;\n  border-bottom: 3px solid transparent;\n  background: transparent;\n  color: #c8cfdb;\n  white-space: nowrap;\n  padding: 17px 18px;\n  font-size: 13px;\n  font-weight: 700;\n}\n\n#lm-especial .lm-tab:hover,\n#lm-especial .lm-nav-buscar:hover,\n#lm-especial .lm-tab.activo {\n  color: white;\n  border-bottom-color: var(--lm-rojo);\n}\n\n#lm-especial .lm-nav-buscar {\n  margin-left: auto;\n}\n\n\/* PORTADA EDITORIAL *\/\n\n#lm-especial .lm-hero {\n  background:\n    radial-gradient(ellipse at 86% 20%,\n      rgba(197,31,50,.23), transparent 42%),\n    linear-gradient(125deg, #151e2d, #090e17);\n  color: #fff;\n  padding: 90px 0 60px;\n  position: relative;\n  overflow: hidden;\n}\n\n#lm-especial .lm-hero::after {\n  content: \"INE\";\n  position: absolute;\n  right: -3%;\n  top: -20px;\n  font-weight: 900;\n  font-size: clamp(180px, 29vw, 460px);\n  letter-spacing: -30px;\n  color: rgba(255,255,255,.025);\n  pointer-events: none;\n}\n\n#lm-especial .lm-hero .lm-contenedor {\n  position: relative;\n  z-index: 1;\n}\n\n#lm-especial .lm-eyebrow,\n#lm-especial .lm-kicker {\n  font-size: 11px;\n  font-weight: 800;\n  letter-spacing: 2.5px;\n  text-transform: uppercase;\n}\n\n#lm-especial .lm-eyebrow {\n  color: #e8b7c0;\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n\n#lm-especial .lm-punto {\n  width: 9px;\n  height: 9px;\n  background: #e3344d;\n  border-radius: 50%;\n}\n\n#lm-especial .lm-hero h1 {\n  color: #fff;\n  font-family: Georgia, 'Times New Roman', serif;\n  font-size: clamp(58px, 8.5vw, 125px);\n  line-height: .96;\n  letter-spacing: -4px;\n  font-weight: 800;\n  margin: 30px 0;\n}\n\n#lm-especial .lm-hero h1 em {\n  color: #ee4355;\n  font-style: normal;\n}\n\n#lm-especial .lm-subtitulo {\n  color: #c3cad7;\n  font-size: clamp(17px, 2vw, 21px);\n  max-width: 730px;\n  line-height: 1.65;\n  margin-bottom: 55px;\n}\n\n#lm-especial .lm-hero-pie {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 20px;\n  padding-top: 23px;\n  border-top: 1px solid #3a4352;\n  font-size: 11px;\n  letter-spacing: 2px;\n  color: #9da9ba;\n}\n\n#lm-especial .lm-hero-pie a {\n  color: #fff;\n  font-weight: 700;\n  letter-spacing: 0;\n  font-size: 13px;\n}\n\n\/* SECCI\u00d3N DE NOTICIAS *\/\n\n#lm-especial .lm-contenido {\n  padding-top: 65px;\n  padding-bottom: 90px;\n}\n\n#lm-especial .lm-barra-seccion {\n  display: flex;\n  justify-content: space-between;\n  align-items: end;\n  gap: 24px;\n  margin-bottom: 25px;\n}\n\n#lm-especial .lm-kicker { color: var(--lm-rojo); }\n\n#lm-especial .lm-barra-seccion h2 {\n  font-family: Georgia, serif;\n  font-weight: bold;\n  font-size: clamp(32px, 4vw, 49px);\n  letter-spacing: -1.3px;\n  margin: 8px 0 0;\n}\n\n#lm-especial .lm-actualizacion {\n  text-align: right;\n  color: #77808e;\n  font-size: 10px;\n  font-weight: bold;\n  letter-spacing: 1px;\n}\n\n#lm-especial #lm-contador {\n  display: block;\n  color: var(--lm-negro);\n  font-size: 13px;\n  letter-spacing: 0;\n  margin-top: 7px;\n}\n\n#lm-especial .lm-herramientas {\n  background: var(--lm-fondo);\n  border: 1px solid var(--lm-borde);\n  padding: 16px;\n  display: grid;\n  grid-template-columns: 1fr 235px;\n  gap: 12px;\n  margin-bottom: 35px;\n  border-radius: 9px;\n}\n\n#lm-especial .lm-campo-busqueda {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  background: white;\n  border: 1px solid #dce0e6;\n  border-radius: 5px;\n  padding: 0 15px;\n}\n\n#lm-especial .lm-campo-busqueda span {\n  font-size: 25px;\n  color: #667085;\n}\n\n#lm-especial .lm-campo-busqueda input {\n  width: 100%;\n  min-width: 0;\n  padding: 13px 0;\n  border: 0;\n  outline: 0;\n  box-shadow: none;\n  background: transparent;\n  color: #111722;\n  font-size: 14px;\n}\n\n#lm-especial #lm-orden {\n  border: 1px solid #dce0e6;\n  border-radius: 5px;\n  background: white;\n  color: #303948;\n  padding: 0 12px;\n  min-height: 48px;\n  font-size: 13px;\n}\n\n#lm-especial #lm-estado {\n  color: #667085;\n  margin: 20px 0;\n  font-size: 14px;\n}\n\n#lm-especial #lm-estado:empty { display: none; }\n\n\/* NOTICIA PRINCIPAL *\/\n\n#lm-especial .lm-principal {\n  display: grid;\n  grid-template-columns: 1.3fr 1fr;\n  background: #141d2b;\n  color: white;\n  overflow: hidden;\n  border-radius: 10px;\n  margin: 0 0 48px;\n}\n\n#lm-especial .lm-principal-imagen {\n  min-height: 400px;\n  display: block;\n  overflow: hidden;\n  background: #273247;\n}\n\n#lm-especial .lm-principal-imagen img {\n  display: block;\n  width: 100%;\n  height: 100%;\n  min-height: 400px;\n  object-fit: cover;\n  transition: transform .35s;\n}\n\n#lm-especial .lm-principal:hover img,\n#lm-especial .lm-card:hover img {\n  transform: scale(1.035);\n}\n\n#lm-especial .lm-principal-info {\n  padding: clamp(28px, 4vw, 55px);\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n}\n\n#lm-especial .lm-etiqueta {\n  color: #e4485c;\n  font-size: 11px;\n  font-weight: 800;\n  letter-spacing: 2px;\n  text-transform: uppercase;\n}\n\n#lm-especial .lm-principal h3 {\n  font-family: Georgia, serif;\n  font-size: clamp(27px, 3.2vw, 42px);\n  line-height: 1.15;\n  letter-spacing: -.9px;\n  margin: 18px 0;\n}\n\n#lm-especial .lm-principal h3 a { color: #fff; }\n\n#lm-especial .lm-principal p {\n  color: #c4ccd7;\n  font-size: 15px;\n  line-height: 1.75;\n}\n\n#lm-especial .lm-fecha {\n  color: #8e98a8;\n  font-size: 12px;\n  margin-top: 12px;\n}\n\n#lm-especial .lm-principal .lm-fecha { color: #b9c1cf; }\n\n#lm-especial .lm-leer {\n  display: inline-block;\n  font-weight: 800;\n  color: #e74456;\n  font-size: 13px;\n  margin-top: 22px;\n}\n\n\/* TARJETAS *\/\n\n#lm-especial .lm-encabezado-lista {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  border-bottom: 2px solid #141d2b;\n  padding-bottom: 14px;\n  margin-bottom: 28px;\n}\n\n#lm-especial .lm-encabezado-lista h3 {\n  font-family: Georgia, serif;\n  font-size: 26px;\n  margin: 0;\n}\n\n#lm-especial .lm-encabezado-lista span {\n  color: #8d96a2;\n  letter-spacing: 2px;\n  font-size: 10px;\n}\n\n#lm-especial .lm-grid {\n  display: grid;\n  grid-template-columns: repeat(3, minmax(0, 1fr));\n  gap: 38px 25px;\n}\n\n#lm-especial .lm-card {\n  min-width: 0;\n  border-bottom: 1px solid var(--lm-borde);\n  padding-bottom: 25px;\n}\n\n#lm-especial .lm-card-imagen {\n  display: block;\n  width: 100%;\n  aspect-ratio: 16\/10;\n  overflow: hidden;\n  border-radius: 7px;\n  background: #e5e8ee;\n  margin-bottom: 20px;\n}\n\n#lm-especial .lm-card-imagen img {\n  display: block;\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  transition: transform .35s;\n}\n\n#lm-especial .lm-card h3 {\n  font-family: Georgia, serif;\n  font-size: 23px;\n  line-height: 1.28;\n  margin: 12px 0;\n  letter-spacing: -.4px;\n}\n\n#lm-especial .lm-card h3 a {\n  color: #151d29;\n}\n\n#lm-especial .lm-card h3 a:hover {\n  color: var(--lm-rojo);\n}\n\n#lm-especial .lm-card p {\n  color: #626b79;\n  font-size: 14px;\n  line-height: 1.7;\n  margin: 12px 0;\n}\n\n#lm-especial .lm-cargar {\n  text-align: center;\n  margin-top: 45px;\n}\n\n#lm-especial #lm-mas {\n  padding: 16px 35px;\n  background: var(--lm-negro);\n  color: white;\n  border: 0;\n  border-radius: 6px;\n  font-size: 14px;\n  font-weight: bold;\n}\n\n#lm-especial #lm-mas:hover {\n  background: var(--lm-rojo);\n}\n\n\/* CIERRE EDITORIAL *\/\n\n#lm-especial .lm-franja {\n  background: #f2f3f5;\n  border-top: 1px solid #dfe2e7;\n  padding: 60px 0;\n}\n\n#lm-especial .lm-franja-interior {\n  display: flex;\n  justify-content: space-between;\n  align-items: center;\n  gap: 30px;\n}\n\n#lm-especial .lm-franja h2 {\n  font-family: Georgia, serif;\n  font-size: clamp(29px, 4vw, 45px);\n  margin: 12px 0;\n}\n\n#lm-especial .lm-franja p {\n  max-width: 650px;\n  color: #626b79;\n  line-height: 1.7;\n}\n\n#lm-especial .lm-franja a {\n  background: var(--lm-rojo);\n  color: white;\n  padding: 16px 24px;\n  white-space: nowrap;\n  border-radius: 5px;\n  font-weight: bold;\n  font-size: 13px;\n}\n\n#lm-especial .lm-footer {\n  background: #111722;\n  color: #aab4c4;\n  padding: 25px 0;\n}\n\n#lm-especial .lm-footer-interior {\n  display: flex;\n  align-items: center;\n  gap: 22px;\n  font-size: 12px;\n}\n\n#lm-especial .lm-footer strong {\n  color: white;\n  letter-spacing: 1px;\n}\n\n#lm-especial .lm-footer a {\n  color: white;\n  margin-left: auto;\n}\n\n\/* ADAPTACI\u00d3N A M\u00d3VILES *\/\n\n@media (max-width: 900px) {\n  #lm-especial .lm-grid {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n\n  #lm-especial .lm-principal {\n    grid-template-columns: 1fr;\n  }\n\n  #lm-especial .lm-principal-imagen,\n  #lm-especial .lm-principal-imagen img {\n    min-height: 0;\n    aspect-ratio: 16\/9;\n  }\n}\n\n@media (max-width: 600px) {\n  #lm-especial .lm-cabecera-interior {\n    min-height: 75px;\n  }\n\n  #lm-especial #lm-logo-texto strong {\n    font-size: 21px;\n  }\n\n  #lm-especial #lm-logo { max-width: 185px; }\n\n  #lm-especial .lm-inicio {\n    padding: 7px 10px;\n  }\n\n  #lm-especial .lm-hero {\n    padding: 65px 0 38px;\n  }\n\n  #lm-especial .lm-hero h1 {\n    letter-spacing: -2px;\n    font-size: clamp(49px, 11vw, 70px);\n  }\n\n  #lm-especial .lm-hero-pie {\n    align-items: flex-start;\n    flex-direction: column;\n  }\n\n  #lm-especial .lm-contenido {\n    padding-top: 40px;\n    padding-bottom: 55px;\n  }\n\n  #lm-especial .lm-barra-seccion {\n    align-items: flex-start;\n    flex-direction: column;\n  }\n\n  #lm-especial .lm-actualizacion {\n    text-align: left;\n  }\n\n  #lm-especial .lm-herramientas {\n    grid-template-columns: 1fr;\n  }\n\n  #lm-especial .lm-grid {\n    grid-template-columns: 1fr;\n  }\n\n  #lm-especial .lm-card h3 {\n    font-size: 25px;\n  }\n\n  #lm-especial .lm-principal-info {\n    padding: 28px;\n  }\n\n  #lm-especial .lm-franja-interior {\n    align-items: flex-start;\n    flex-direction: column;\n  }\n\n  #lm-especial .lm-footer-interior {\n    flex-wrap: wrap;\n  }\n}\n&lt;\/style>\n\n&lt;script>\n(function () {\n  \"use strict\";\n\n  const root = document.getElementById(\"lm-especial\");\n  if (!root || root.dataset.iniciado === \"1\") return;\n  root.dataset.iniciado = \"1\";\n\n  \/*\n   * CONFIGURACI\u00d3N\n   *\n   * Se utiliza autom\u00e1ticamente el dominio de WordPress\n   * donde est\u00e1 instalada esta p\u00e1gina.\n   *\n   * Para colocar manualmente el logotipo:\n   * escribe su URL entre las comillas de LOGO_URL.\n   *\/\n\n  const CONFIG = {\n    API: window.location.origin + \"\/wp-json\/wp\/v2\",\n    HOME: window.location.origin + \"\/\",\n    LOGO_URL: \"\",\n    POR_PAGINA: 12,\n\n    etiquetas: {\n      taddei: &#91;\"Taddei\", \"Guadalupe Taddei\"],\n      ine: &#91;\"INE\"],\n      proveedor: &#91;\n        \"Jos\u00e9 Alfredo Hern\u00e1ndez\",\n        \"Jos\u00e9 Alfredo Hern\u00e1ndez Casillas\"\n      ]\n    }\n  };\n\n  const $ = (selector) => root.querySelector(selector);\n\n  const interfaz = {\n    estado: $(\"#lm-estado\"),\n    principal: $(\"#lm-destacada\"),\n    lista: $(\"#lm-articulos\"),\n    mas: $(\"#lm-mas\"),\n    contador: $(\"#lm-contador\"),\n    titulo: $(\"#lm-titulo-seccion\"),\n    buscador: $(\"#lm-search\"),\n    orden: $(\"#lm-orden\"),\n    listaTitulo: $(\"#lm-lista-titulo\")\n  };\n\n  const estado = {\n    tema: \"todos\",\n    etiquetas: {},\n    pagina: 1,\n    totalPaginas: 0,\n    total: 0,\n    busqueda: \"\",\n    orden: \"desc\",\n    cargando: false,\n    solicitud: 0\n  };\n\n  function normalizar(texto) {\n    return String(texto || \"\")\n      .normalize(\"NFD\")\n      .replace(\/&#91;\\u0300-\\u036f]\/g, \"\")\n      .toLowerCase()\n      .trim()\n      .replace(\/\\s+\/g, \" \");\n  }\n\n  function textoPlano(html) {\n    const elemento = document.createElement(\"div\");\n    elemento.innerHTML = html || \"\";\n    return (elemento.textContent || \"\").trim()\n      .replace(\/\\s+\/g, \" \");\n  }\n\n  function escapar(texto) {\n    return String(texto ?? \"\").replace(\/&#91;&amp;&lt;>\"']\/g, c => ({\n      \"&amp;\": \"&amp;amp;\",\n      \"&lt;\": \"&amp;lt;\",\n      \">\": \"&amp;gt;\",\n      '\"': \"&amp;quot;\",\n      \"'\": \"&amp;#39;\"\n    }&#91;c]));\n  }\n\n  function urlSegura(url) {\n    try {\n      const u = new URL(url, window.location.origin);\n      return &#91;\"https:\", \"http:\"].includes(u.protocol)\n        ? u.href : \"#\";\n    } catch (e) {\n      return \"#\";\n    }\n  }\n\n  function fecha(entrada) {\n    const valor = entrada.date || entrada.date_gmt;\n    if (!valor) return \"\";\n\n    const partes = valor.slice(0, 10).split(\"-\").map(Number);\n    const f = new Date(partes&#91;0], partes&#91;1] - 1, partes&#91;2]);\n\n    return new Intl.DateTimeFormat(\"es-MX\", {\n      day: \"numeric\",\n      month: \"long\",\n      year: \"numeric\"\n    }).format(f);\n  }\n\n  function imagen(entrada) {\n    const media = entrada._embedded?.&#91;\"wp:featuredmedia\"]?.&#91;0];\n\n    return urlSegura(\n      media?.media_details?.sizes?.large?.source_url ||\n      media?.source_url ||\n      \"\"\n    );\n  }\n\n  function etiqueta(entrada) {\n    const ids = entrada.tags || &#91;];\n\n    if ((estado.etiquetas.proveedor || &#91;])\n        .some(id => ids.includes(id))) {\n      return \"CONTRATOS Y PROVEEDORES\";\n    }\n\n    if ((estado.etiquetas.taddei || &#91;])\n        .some(id => ids.includes(id))) {\n      return \"GUADALUPE TADDEI\";\n    }\n\n    return \"INSTITUTO NACIONAL ELECTORAL\";\n  }\n\n  function crearImagen(src, titulo, destacada = false) {\n    if (src === \"#\") {\n      return `\n        &lt;div class=\"${destacada ?\n          \"lm-principal-imagen\" : \"lm-card-imagen\"}\"\n          style=\"display:flex;align-items:center;\n          justify-content:center;color:#9ca8bc;\n          font-weight:bold;letter-spacing:2px\">\n          LITERAL M\u00c9XICO\n        &lt;\/div>\n      `;\n    }\n\n    return `\n      &lt;div class=\"${destacada ?\n        \"lm-principal-imagen\" : \"lm-card-imagen\"}\">\n        &lt;img src=\"${escapar(src)}\"\n          alt=\"${escapar(titulo)}\"\n          loading=\"${destacada ? \"eager\" : \"lazy\"}\">\n      &lt;\/div>\n    `;\n  }\n\n  function tarjeta(entrada, destacada = false) {\n    const titulo = textoPlano(entrada.title?.rendered);\n    const resumen = textoPlano(entrada.excerpt?.rendered);\n    const enlace = urlSegura(entrada.link);\n    const foto = imagen(entrada);\n    const limite = destacada ? 260 : 145;\n\n    const extracto = resumen.length > limite\n      ? resumen.slice(0, limite).trimEnd() + \"\u2026\"\n      : resumen;\n\n    if (destacada) {\n      return `\n        &lt;article class=\"lm-principal\">\n          &lt;a href=\"${escapar(enlace)}\"\n             aria-label=\"${escapar(titulo)}\">\n            ${crearImagen(foto, titulo, true)}\n          &lt;\/a>\n          &lt;div class=\"lm-principal-info\">\n            &lt;span class=\"lm-etiqueta\">\n              ${escapar(etiqueta(entrada))}\n            &lt;\/span>\n            &lt;h3>\n              &lt;a href=\"${escapar(enlace)}\">\n                ${escapar(titulo)}\n              &lt;\/a>\n            &lt;\/h3>\n            &lt;p>${escapar(extracto)}&lt;\/p>\n            &lt;span class=\"lm-fecha\">${fecha(entrada)}&lt;\/span>\n            &lt;a class=\"lm-leer\" href=\"${escapar(enlace)}\">\n              LEER INVESTIGACI\u00d3N \u2192\n            &lt;\/a>\n          &lt;\/div>\n        &lt;\/article>\n      `;\n    }\n\n    return `\n      &lt;article class=\"lm-card\">\n        &lt;a href=\"${escapar(enlace)}\"\n           aria-label=\"${escapar(titulo)}\">\n          ${crearImagen(foto, titulo)}\n        &lt;\/a>\n        &lt;span class=\"lm-etiqueta\">\n          ${escapar(etiqueta(entrada))}\n        &lt;\/span>\n        &lt;h3>\n          &lt;a href=\"${escapar(enlace)}\">\n            ${escapar(titulo)}\n          &lt;\/a>\n        &lt;\/h3>\n        &lt;p>${escapar(extracto)}&lt;\/p>\n        &lt;span class=\"lm-fecha\">${fecha(entrada)}&lt;\/span>\n        &lt;div>\n          &lt;a class=\"lm-leer\" href=\"${escapar(enlace)}\">\n            LEER M\u00c1S \u2192\n          &lt;\/a>\n        &lt;\/div>\n      &lt;\/article>\n    `;\n  }\n\n  function configurarLogo() {\n    const logo = $(\"#lm-logo\");\n    const texto = $(\"#lm-logo-texto\");\n    const marca = $(\".lm-marca\");\n\n    marca.href = CONFIG.HOME;\n    $(\".lm-inicio\").href = CONFIG.HOME;\n\n    let origen = CONFIG.LOGO_URL;\n\n    if (!origen) {\n      const logoTema = document.querySelector(\n        \"header .custom-logo, \" +\n        \".site-header .custom-logo, \" +\n        \".site-logo img, \" +\n        \".wp-block-site-logo img\"\n      );\n\n      if (logoTema &amp;&amp; !root.contains(logoTema)) {\n        origen = logoTema.currentSrc || logoTema.src;\n      }\n    }\n\n    if (origen) {\n      logo.src = origen;\n      logo.onload = function () {\n        logo.hidden = false;\n        texto.hidden = true;\n      };\n    }\n  }\n\n  async function obtenerJSON(url) {\n    const respuesta = await fetch(url, {\n      credentials: \"same-origin\",\n      headers: { \"Accept\": \"application\/json\" }\n    });\n\n    if (!respuesta.ok) {\n      throw new Error(\"Error HTTP \" + respuesta.status);\n    }\n\n    return respuesta;\n  }\n\n  async function descubrirEtiquetas() {\n    const nombres = &#91;...new Set(\n      Object.values(CONFIG.etiquetas).flat()\n    )];\n\n    const respuestas = await Promise.all(\n      nombres.map(async nombre => {\n        const url = CONFIG.API +\n          \"\/tags?per_page=100&amp;search=\" +\n          encodeURIComponent(nombre);\n\n        const respuesta = await obtenerJSON(url);\n        const resultados = await respuesta.json();\n\n        return resultados.filter(tag =>\n          normalizar(tag.name) === normalizar(nombre)\n        );\n      })\n    );\n\n    const encontradas = new Map();\n\n    respuestas.flat().forEach(tag => {\n      encontradas.set(normalizar(tag.name), tag.id);\n    });\n\n    for (const &#91;grupo, nombresGrupo] of\n      Object.entries(CONFIG.etiquetas)) {\n\n      estado.etiquetas&#91;grupo] = nombresGrupo\n        .map(nombre => encontradas.get(normalizar(nombre)))\n        .filter(Boolean);\n    }\n  }\n\n  function idsActuales() {\n    if (estado.tema === \"todos\") {\n      return &#91;...new Set(\n        Object.values(estado.etiquetas).flat()\n      )];\n    }\n\n    return &#91;...new Set(\n      estado.etiquetas&#91;estado.tema] || &#91;]\n    )];\n  }\n\n  function mostrarEstado(mensaje) {\n    interfaz.estado.textContent = mensaje;\n  }\n\n  async function cargarNoticias(reiniciar = false) {\n    if (estado.cargando &amp;&amp; !reiniciar) return;\n\n    if (reiniciar) {\n      estado.solicitud++;\n      estado.pagina = 1;\n      interfaz.principal.innerHTML = \"\";\n      interfaz.lista.innerHTML = \"\";\n      interfaz.listaTitulo.hidden = true;\n    }\n\n    const solicitudActual = estado.solicitud;\n    const paginaActual = estado.pagina;\n    const ids = idsActuales();\n\n    if (!ids.length) {\n      interfaz.mas.hidden = true;\n      interfaz.contador.textContent = \"0 publicaciones\";\n      mostrarEstado(\n        \"No se encontraron las etiquetas exactas de esta secci\u00f3n.\"\n      );\n      return;\n    }\n\n    estado.cargando = true;\n    interfaz.mas.disabled = true;\n    interfaz.mas.hidden = true;\n    mostrarEstado(\"Consultando publicaciones...\");\n\n    try {\n      const parametros = new URLSearchParams({\n        tags: ids.join(\",\"),\n        per_page: CONFIG.POR_PAGINA,\n        page: String(paginaActual),\n        order: estado.orden,\n        orderby: \"date\",\n        _embed: \"wp:featuredmedia\"\n      });\n\n      if (estado.busqueda) {\n        parametros.set(\"search\", estado.busqueda);\n      }\n\n      const respuesta = await obtenerJSON(\n        CONFIG.API + \"\/posts?\" + parametros.toString()\n      );\n\n      const publicaciones = await respuesta.json();\n\n      if (solicitudActual !== estado.solicitud) return;\n\n      estado.total = Number(\n        respuesta.headers.get(\"X-WP-Total\") || publicaciones.length\n      );\n\n      estado.totalPaginas = Number(\n        respuesta.headers.get(\"X-WP-TotalPages\") || 1\n      );\n\n      interfaz.contador.textContent =\n        estado.total + \" publicaciones\";\n\n      if (reiniciar &amp;&amp; publicaciones.length) {\n        const &#91;primera, ...resto] = publicaciones;\n\n        interfaz.principal.innerHTML = tarjeta(primera, true);\n        interfaz.lista.innerHTML =\n          resto.map(p => tarjeta(p)).join(\"\");\n      } else {\n        interfaz.lista.insertAdjacentHTML(\n          \"beforeend\",\n          publicaciones.map(p => tarjeta(p)).join(\"\")\n        );\n      }\n\n      interfaz.listaTitulo.hidden =\n        !interfaz.lista.children.length;\n\n      if (!publicaciones.length &amp;&amp; reiniciar) {\n        mostrarEstado(\n          \"No hay publicaciones para esta b\u00fasqueda o selecci\u00f3n.\"\n        );\n      } else {\n        mostrarEstado(\"\");\n      }\n\n      estado.pagina = paginaActual + 1;\n      interfaz.mas.hidden =\n        paginaActual >= estado.totalPaginas;\n\n    } catch (error) {\n      if (solicitudActual !== estado.solicitud) return;\n\n      console.error(\"Literal M\u00e9xico:\", error);\n\n      mostrarEstado(\n        \"No fue posible recuperar las noticias. \" +\n        \"Comprueba que la API REST de WordPress est\u00e9 habilitada \" +\n        \"y que las entradas tengan las etiquetas indicadas.\"\n      );\n    } finally {\n      if (solicitudActual === estado.solicitud) {\n        estado.cargando = false;\n        interfaz.mas.disabled = false;\n      }\n    }\n  }\n\n  const titulos = {\n    todos: \"Toda la cobertura\",\n    taddei: \"Guadalupe Taddei\",\n    ine: \"Instituto Nacional Electoral\",\n    proveedor: \"Jos\u00e9 Alfredo Hern\u00e1ndez\"\n  };\n\n  root.querySelectorAll(\".lm-tab\").forEach(boton => {\n    boton.addEventListener(\"click\", () => {\n      estado.tema = boton.dataset.tema;\n\n      root.querySelectorAll(\".lm-tab\").forEach(b => {\n        b.classList.toggle(\"activo\", b === boton);\n      });\n\n      interfaz.titulo.textContent = titulos&#91;estado.tema];\n      cargarNoticias(true);\n    });\n  });\n\n  let temporizadorBusqueda;\n\n  interfaz.buscador.addEventListener(\"input\", () => {\n    clearTimeout(temporizadorBusqueda);\n\n    temporizadorBusqueda = setTimeout(() => {\n      estado.busqueda = interfaz.buscador.value.trim();\n      cargarNoticias(true);\n    }, 400);\n  });\n\n  interfaz.orden.addEventListener(\"change\", () => {\n    estado.orden = interfaz.orden.value;\n    cargarNoticias(true);\n  });\n\n  interfaz.mas.addEventListener(\"click\", () => {\n    cargarNoticias(false);\n  });\n\n  async function iniciar() {\n    configurarLogo();\n\n    root.querySelectorAll('a&#91;href=\"\/\"]').forEach(a => {\n      a.href = CONFIG.HOME;\n    });\n\n    try {\n      await descubrirEtiquetas();\n      await cargarNoticias(true);\n    } catch (error) {\n      console.error(\"Error de inicializaci\u00f3n:\", error);\n\n      mostrarEstado(\n        \"No se pudo conectar con el archivo de noticias. \" +\n        \"Verifica la direcci\u00f3n del sitio y el acceso a la API REST.\"\n      );\n    }\n  }\n\n  iniciar();\n})();\n&lt;\/script>\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"twitterCardType":"","cardImageID":0,"cardImage":"","cardTitle":"","cardDesc":"","cardImageAlt":"","cardPlayer":"","cardPlayerWidth":0,"cardPlayerHeight":0,"cardPlayerStream":"","cardPlayerCodec":"","footnotes":""},"class_list":["post-4545","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/literalmex.com\/index.php\/wp-json\/wp\/v2\/pages\/4545","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/literalmex.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/literalmex.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/literalmex.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/literalmex.com\/index.php\/wp-json\/wp\/v2\/comments?post=4545"}],"version-history":[{"count":1,"href":"https:\/\/literalmex.com\/index.php\/wp-json\/wp\/v2\/pages\/4545\/revisions"}],"predecessor-version":[{"id":4547,"href":"https:\/\/literalmex.com\/index.php\/wp-json\/wp\/v2\/pages\/4545\/revisions\/4547"}],"wp:attachment":[{"href":"https:\/\/literalmex.com\/index.php\/wp-json\/wp\/v2\/media?parent=4545"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}