{"id":5110,"date":"2026-05-19T16:39:43","date_gmt":"2026-05-19T22:39:43","guid":{"rendered":"https:\/\/amf.org.mx\/mexican-network\/"},"modified":"2026-06-29T11:22:47","modified_gmt":"2026-06-29T17:22:47","slug":"mexican-network","status":"publish","type":"page","link":"https:\/\/amf.org.mx\/en\/mexican-network\/","title":{"rendered":"Mexican Network"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5110\" class=\"elementor elementor-5110 elementor-4596\" data-elementor-settings=\"{&quot;element_pack_global_tooltip_width&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_width_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_width_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;element_pack_global_tooltip_padding&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_padding_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_padding_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true},&quot;element_pack_global_tooltip_border_radius_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;top&quot;:&quot;&quot;,&quot;right&quot;:&quot;&quot;,&quot;bottom&quot;:&quot;&quot;,&quot;left&quot;:&quot;&quot;,&quot;isLinked&quot;:true}}\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<div class=\"elementor-section elementor-top-section elementor-element elementor-element-ba42aed elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"ba42aed\" 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-ee839d5\" data-id=\"ee839d5\" 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-ad40bff elementor-widget__width-initial elementor-widget-tablet__width-initial elementor-widget-mobile__width-inherit  ui-split-animate ui-splitby-lines elementor-widget elementor-widget-heading\" data-id=\"ad40bff\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;ui_animate_split&quot;:&quot;ui-split-animate&quot;,&quot;ui_animate_split_by&quot;:&quot;lines&quot;,&quot;ui_animate_split_style&quot;:&quot;fadeInUp&quot;}\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">The Mexican Network <\/h1>\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<\/div>\n\t\t<div class=\"elementor-element elementor-element-3dcca85 e-flex e-con-boxed e-con e-parent\" data-id=\"3dcca85\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-02e4efd elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"02e4efd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div style=\"width:100%;height:100vh;overflow:hidden;position:relative;background:#ffffff\">\n  <canvas id=\"pdf-canvas\" style=\"cursor:grab;display:block;position:absolute;top:0;left:0\"><\/canvas>\n\n  <div style=\"position:absolute;bottom:24px;left:50%;transform:translateX(-50%);display:flex;gap:8px;z-index:10\">\n    <button onclick=\"zoomIn()\" style=\"width:40px;height:40px;border-radius:8px;border:none;background:#AA402C;color:#fff;font-size:20px;cursor:pointer;font-weight:500\">+<\/button>\n    <button onclick=\"zoomOut()\" style=\"width:40px;height:40px;border-radius:8px;border:none;background:#AA402C;color:#fff;font-size:20px;cursor:pointer;font-weight:500\">\u2212<\/button>\n    <button onclick=\"resetView()\" style=\"height:40px;padding:0 14px;border-radius:8px;border:none;background:#AA402C;color:#fff;font-size:13px;cursor:pointer;font-weight:500\">Reset<\/button>\n  <\/div>\n<\/div>\n\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/3.11.174\/pdf.min.js\"><\/script>\n<script>\n  pdfjsLib.GlobalWorkerOptions.workerSrc =\n    'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/3.11.174\/pdf.worker.min.js';\n\n  const url = 'https:\/\/ik.imagekit.io\/tdi625\/Mapa%20Red%20Norteame%CC%81ricav7.1.pdf';\n  const canvas = document.getElementById('pdf-canvas');\n  const ctx = canvas.getContext('2d');\n  const container = canvas.parentElement;\n  const dpr = window.devicePixelRatio || 1;\n\n  let offsetX = 0, offsetY = 0;\n  let isDragging = false;\n  let startX, startY;\n  let baseScale = 1;\n  let currentScale = 1;\n  let defaultOffsetX = 0, defaultOffsetY = 0;\n  let pdfPage = null;\n  let rendering = false;\n  let pendingRender = false;\n\n  pdfjsLib.getDocument({\n    url: url,\n    cMapUrl: 'https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/pdf.js\/3.11.174\/cmaps\/',\n    cMapPacked: true\n  }).promise.then(pdf => {\n    pdf.getPage(1).then(page => {\n      pdfPage = page;\n      const baseViewport = page.getViewport({ scale: 1 });\n      const scaleX = container.clientWidth \/ baseViewport.width;\n      const scaleY = container.clientHeight \/ baseViewport.height;\n      baseScale = Math.min(scaleX, scaleY);\n      currentScale = baseScale;\n      renderPage(currentScale, true);\n    });\n  }).catch(err => {\n    console.error('Error cargando PDF:', err);\n  });\n\n  function renderPage(scale, center = false) {\n    if (!pdfPage) return;\n\n    if (rendering) {\n      pendingRender = { scale, center };\n      return;\n    }\n\n    rendering = true;\n    const viewport = pdfPage.getViewport({ scale: scale * dpr });\n\n    canvas.width = viewport.width;\n    canvas.height = viewport.height;\n    canvas.style.width = (viewport.width \/ dpr) + 'px';\n    canvas.style.height = (viewport.height \/ dpr) + 'px';\n\n    if (center) {\n      offsetX = (container.clientWidth - viewport.width \/ dpr) \/ 2;\n      offsetY = (container.clientHeight - viewport.height \/ dpr) \/ 2;\n      defaultOffsetX = offsetX;\n      defaultOffsetY = offsetY;\n    }\n\n    canvas.style.transform = `translate(${offsetX}px, ${offsetY}px)`;\n\n    pdfPage.render({ canvasContext: ctx, viewport }).promise.then(() => {\n      rendering = false;\n      if (pendingRender) {\n        const next = pendingRender;\n        pendingRender = null;\n        renderPage(next.scale, next.center);\n      }\n    });\n  }\n\n  function zoomIn() {\n    const prev = currentScale;\n    currentScale = Math.min(currentScale * 1.3, baseScale * 8);\n    const cx = container.clientWidth \/ 2;\n    const cy = container.clientHeight \/ 2;\n    offsetX = cx - (cx - offsetX) * (currentScale \/ prev);\n    offsetY = cy - (cy - offsetY) * (currentScale \/ prev);\n    renderPage(currentScale);\n  }\n\n  function zoomOut() {\n    const prev = currentScale;\n    currentScale = Math.max(currentScale \/ 1.3, baseScale);\n    const cx = container.clientWidth \/ 2;\n    const cy = container.clientHeight \/ 2;\n    offsetX = cx - (cx - offsetX) * (currentScale \/ prev);\n    offsetY = cy - (cy - offsetY) * (currentScale \/ prev);\n    renderPage(currentScale);\n  }\n\n  function resetView() {\n    currentScale = baseScale;\n    offsetX = defaultOffsetX;\n    offsetY = defaultOffsetY;\n    renderPage(currentScale);\n  }\n\n  canvas.addEventListener('mousedown', e => {\n    isDragging = true;\n    startX = e.clientX - offsetX;\n    startY = e.clientY - offsetY;\n    canvas.style.cursor = 'grabbing';\n  });\n\n  window.addEventListener('mousemove', e => {\n    if (!isDragging) return;\n    offsetX = e.clientX - startX;\n    offsetY = e.clientY - startY;\n    canvas.style.transform = `translate(${offsetX}px, ${offsetY}px)`;\n  });\n\n  window.addEventListener('mouseup', () => {\n    isDragging = false;\n    canvas.style.cursor = 'grab';\n  });\n\n  canvas.addEventListener('touchstart', e => {\n    isDragging = true;\n    startX = e.touches[0].clientX - offsetX;\n    startY = e.touches[0].clientY - offsetY;\n  }, { passive: true });\n\n  window.addEventListener('touchmove', e => {\n    if (!isDragging) return;\n    offsetX = e.touches[0].clientX - startX;\n    offsetY = e.touches[0].clientY - startY;\n    canvas.style.transform = `translate(${offsetX}px, ${offsetY}px)`;\n  }, { passive: true });\n\n  window.addEventListener('touchend', () => { isDragging = false; });\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>The Mexican Network + \u2212 Reset<\/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-5110","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/amf.org.mx\/en\/wp-json\/wp\/v2\/pages\/5110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/amf.org.mx\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/amf.org.mx\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/amf.org.mx\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/amf.org.mx\/en\/wp-json\/wp\/v2\/comments?post=5110"}],"version-history":[{"count":0,"href":"https:\/\/amf.org.mx\/en\/wp-json\/wp\/v2\/pages\/5110\/revisions"}],"wp:attachment":[{"href":"https:\/\/amf.org.mx\/en\/wp-json\/wp\/v2\/media?parent=5110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}