{"id":1109,"date":"2026-07-12T07:12:37","date_gmt":"2026-07-12T07:12:37","guid":{"rendered":"https:\/\/quantum.gob.mx\/?page_id=1109"},"modified":"2026-09-02T18:14:09","modified_gmt":"2026-09-02T18:14:09","slug":"explora-quantum","status":"publish","type":"page","link":"https:\/\/quantum.gob.mx\/en\/explora-quantum\/","title":{"rendered":"EXPLORA QUANTUM"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"1109\" class=\"elementor elementor-1109\">\n\t\t\t\t<div class=\"elementor-element elementor-element-370cbcf aviso-girar-pantalla e-con-full e-flex e-con e-parent\" data-id=\"370cbcf\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dedb177 elementor-absolute elementor-widget elementor-widget-image\" data-id=\"dedb177\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"752\" height=\"848\" src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/07\/Ilustracion_sin_titulo.gif\" class=\"attachment-full size-full wp-image-1182\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-bda6f5c e-flex e-con-boxed e-con e-parent\" data-id=\"bda6f5c\" data-element_type=\"container\" id=\"seccion-bienvenida\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-0abca63 cuadro-cortado e-con-full e-flex elementor-invisible e-con e-child\" data-id=\"0abca63\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeIn&quot;,&quot;animation_tablet&quot;:&quot;fadeInDown&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b39c5b4 elementor-widget-mobile__width-initial elementor-widget elementor-widget-heading\" data-id=\"b39c5b4\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u00a1bIENVENIDo A QUANTUM!<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5490f3d e-con-full seccion-bienvenida e-flex elementor-invisible e-con e-child\" data-id=\"5490f3d\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation_tablet&quot;:&quot;fadeInUp&quot;,&quot;animation&quot;:&quot;fadeIn&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-414eb0a e-con-full e-flex e-con e-child\" data-id=\"414eb0a\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0c941d5 elementor-widget elementor-widget-heading\" data-id=\"0c941d5\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u00bfEst\u00e1s explorando el lugar?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-62b74ae elementor-widget__width-initial elementor-widget-mobile__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"62b74ae\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p style=\"text-align: center;\"><span class=\"a_GcMg font-feature-liga-off font-feature-clig-off font-feature-calt-off text-decoration-none text-strikethrough-none\" style=\"color: #000000;\">Para darte la ruta exacta a tu edificio, <\/span><span style=\"color: #000000;\">selecciona en qu\u00e9 punto te encuentras en este momento.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c92ea7b e-con-full e-flex elementor-invisible e-con e-child\" data-id=\"c92ea7b\" data-element_type=\"container\" data-settings=\"{&quot;animation&quot;:&quot;fadeInUp&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f7cbe90 elementor-widget elementor-widget-button\" data-id=\"f7cbe90\" data-element_type=\"widget\" id=\"btn-ir-a-origen\" data-settings=\"{&quot;_animation_tablet&quot;:&quot;fadeInDown&quot;}\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#\" id=\"btn-empezar\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Establecer punto de partida<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-680b2f9 e-flex e-con-boxed e-con e-parent\" data-id=\"680b2f9\" data-element_type=\"container\" id=\"seccion-partida\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-5ea629d cuadro-cortado e-con-full e-flex e-con e-child\" data-id=\"5ea629d\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation_tablet&quot;:&quot;fadeInDown&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-11990d1 elementor-widget-mobile__width-initial elementor-widget elementor-widget-heading\" data-id=\"11990d1\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\"><span class=\"a_GcMg font-feature-liga-off font-feature-clig-off font-feature-calt-off text-decoration-none text-strikethrough-none\" style=\"--Ys-XuQ: none\">Selecciona un punto de partida<\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-888e488 e-con-full e-flex e-con e-child\" data-id=\"888e488\" data-element_type=\"container\" id=\"mapa\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6bc4f61 elementor-widget elementor-widget-html\" data-id=\"6bc4f61\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"contenedor-principal\" id=\"contenedor-principal\">\r\n  <!-- CONTENEDOR DEL MAPA -->\r\n  <div class=\"contenedor-mapa\" id=\"contenedor-mapa\">\r\n    <img decoding=\"async\"\r\n      class=\"imagen-mapa\"\r\n      id=\"imagen-mapa\"\r\n      src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/fondo_quantum-scaled.png\"\r\n      alt=\"Mapa Quantum Ciudad del Conocimiento\"\r\n    \/>\r\n\r\n    <!-- ICONO FLOTANTE SOBRE EL PUNTO 1 -->\r\n    <img decoding=\"async\"\r\n      class=\"icono-flotante\"\r\n      id=\"icono-flotante\"\r\n      src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/entrada_quantum.png\"\r\n      alt=\"Entrada\"\r\n    \/>\r\n  <\/div>\r\n\r\n  <!-- FONDO OSCURO -->\r\n  <div class=\"fondo-oscuro\" id=\"fondo-oscuro\"><\/div>\r\n\r\n  <!-- PANEL LATERAL -->\r\n  <aside class=\"panel-lateral\" id=\"panel-lateral\">\r\n    <div class=\"panel-cabecera\">\r\n      <span class=\"panel-letra\" id=\"panel-letra\">C<\/span>\r\n      <span class=\"panel-titulo\" id=\"panel-titulo\">Edificio<\/span>\r\n      <button class=\"panel-cerrar\" id=\"panel-cerrar\" aria-label=\"Cerrar\">&#8617;<\/button>\r\n    <\/div>\r\n    <div class=\"panel-cuerpo\">\r\n      <img decoding=\"async\" class=\"panel-imagen\" id=\"panel-imagen\" src=\"\" alt=\"\" \/>\r\n      <h3 id=\"panel-nombre\">Edificio<\/h3>\r\n      <p id=\"panel-descripcion\">Informaci\u00f3n resumida del edificio<\/p>\r\n    <\/div>\r\n    <button class=\"panel-aceptar\" id=\"panel-aceptar\">Aceptar<\/button>\r\n  <\/aside>\r\n\r\n  <!-- POPUP DE ESTACIONAMIENTO -->\r\n  <div class=\"fondo-oscuro-parking\" id=\"fondo-oscuro-parking\"><\/div>\r\n  <div class=\"popup-parking\" id=\"popup-parking\">\r\n    <div class=\"popup-parking-icono\">\ud83c\udd7f\ufe0f<\/div>\r\n    <h3>Estacionamiento<\/h3>\r\n    <p>Este espacio es de uso exclusivo para personal que labora en Quantum Ciudad del Conocimiento.<\/p>\r\n    <button id=\"popup-parking-cerrar\" class=\"popup-parking-cerrar\">Entendido<\/button>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  .contenedor-principal {\r\n    font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;\r\n    width: 100%;\r\n    max-width: 100%;\r\n    margin: 0 auto;\r\n    position: relative;\r\n  }\r\n\r\n  .contenedor-mapa {\r\n    position: relative;\r\n    width: 100%;\r\n    box-shadow: 0 4px 18px rgba(0,0,0,0.15);\r\n    border-radius: 10px;\r\n    opacity: 0;\r\n    animation: aparecerMapa 0.7s cubic-bezier(0.16, 1, 0.3, 1) forwards;\r\n  }\r\n\r\n  .imagen-mapa {\r\n    width: 100%;\r\n    display: block;\r\n    user-select: none;\r\n    -webkit-user-drag: none;\r\n    border-radius: 10px;\r\n  }\r\n\r\n  \/* ---- Entrada del mapa ---- *\/\r\n  @keyframes aparecerMapa {\r\n    from { opacity: 0; transform: scale(0.97); }\r\n    to   { opacity: 1; transform: scale(1); }\r\n  }\r\n\r\n  \/* ---- Icono flotante sobre el punto 1 ---- *\/\r\n  .icono-flotante {\r\n    position: absolute;\r\n    top: 19.6%;\r\n    left: 2.6%;\r\n    width: 9%;\r\n    max-width: 70px;\r\n    min-width: 30px;\r\n    transform: translate(-50%, calc(-100% - 14px));\r\n    pointer-events: none;\r\n    user-select: none;\r\n    -webkit-user-drag: none;\r\n    filter: drop-shadow(0 6px 10px rgba(0,0,0,0.28));\r\n    opacity: 0;\r\n    animation:\r\n      aparecerIcono 0.6s cubic-bezier(0.16, 1, 0.3, 1) 0.5s forwards,\r\n      flotar 3.2s ease-in-out 1.1s infinite;\r\n    z-index: 999;\r\n  }\r\n\r\n  @keyframes aparecerIcono {\r\n    from { opacity: 0; transform: translate(-50%, calc(-100% - 14px)) scale(0.6); }\r\n    to   { opacity: 1; transform: translate(-50%, calc(-100% - 14px)) scale(1); }\r\n  }\r\n\r\n  @keyframes flotar {\r\n    0%, 100% { transform: translate(-50%, calc(-100% - 14px)); }\r\n    50%      { transform: translate(-50%, calc(-100% - 22px)); }\r\n  }\r\n\r\n  \/* ---- Puntos del mapa (botones de edificios y estacionamientos) ---- *\/\r\n  .punto-mapa {\r\n    position: absolute; width: 30px; height: 30px; border-radius: 50%;\r\n    background: linear-gradient(180deg, #48968C 0%, #2a5e60 100%);\r\n    border: 2px solid; color: #fff; font-weight: bold; font-size: 13px; cursor: pointer;\r\n    transform: translate(-50%, -50%); box-shadow: 0 2px 4px rgba(0,0,0,0.2);\r\n    transition: transform 0.2s ease, filter 0.2s ease;\r\n    display: flex; align-items: center; justify-content: center;\r\n    padding: 0; z-index: 5;\r\n    opacity: 0;\r\n    animation: aparecerPunto 0.45s cubic-bezier(0.16, 1, 0.3, 1) forwards;\r\n    animation-delay: var(--retraso, 0s);\r\n  }\r\n  .punto-mapa.punto-generico { background: linear-gradient(180deg, #62828C 0%, #A4BDD1 100%); font-size: 11px; }\r\n  .punto-mapa.punto-especial { background: linear-gradient(180deg, #585F7C 0%, #618BA9 100%); }\r\n  .punto-mapa:hover { transform: translate(-50%, -50%) scale(1.15); filter: brightness(1.2); }\r\n\r\n  @keyframes aparecerPunto {\r\n    from { opacity: 0; transform: translate(-50%, -50%) scale(0.3); }\r\n    to   { opacity: 1; transform: translate(-50%, -50%) scale(1); }\r\n  }\r\n\r\n  \/* ---- Fondo oscuro y panel lateral de informaci\u00f3n de edificio ---- *\/\r\n  .fondo-oscuro { display: none; position: fixed; inset: 0; background: rgba(20,25,25,0.35); z-index: 9998; }\r\n  .fondo-oscuro.activo { display: block; animation: fundido 0.2s ease; }\r\n\r\n  @keyframes fundido {\r\n    from { opacity: 0; }\r\n    to   { opacity: 1; }\r\n  }\r\n\r\n  .panel-lateral {\r\n    position: fixed; top: 0; right: 0; height: 100%; width: 300px; max-width: 85vw;\r\n    background: #fff; z-index: 9999; box-shadow: -8px 0 28px rgba(0,0,0,0.3);\r\n    border-radius: 16px 0 0 16px; overflow: hidden; display: flex; flex-direction: column;\r\n    transform: translateX(100%); transition: transform 0.28s cubic-bezier(0.16, 1, 0.3, 1);\r\n  }\r\n  .panel-lateral.activo { transform: translateX(0); }\r\n  .panel-cabecera { background: #3c6e64; color: #fff; display: flex; align-items: center; padding: 14px 12px; gap: 10px; flex-shrink: 0; }\r\n  .panel-letra { width: 30px; height: 30px; border-radius: 50%; background: #fff; color: #3c6e64; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 14px; flex-shrink: 0; }\r\n  .panel-titulo { flex: 1; font-weight: 700; letter-spacing: 0.5px; font-size: 15px; text-transform: uppercase; }\r\n  .panel-cerrar { background: #fff; border: none; color: #3c6e64; width: 30px; height: 30px; border-radius: 50%; cursor: pointer; font-size: 15px; line-height: 1; display: flex; align-items: center; justify-content: center; flex-shrink: 0; transition: background 0.15s ease, transform 0.15s ease; }\r\n  .panel-cerrar:hover { background: #eaeaea; transform: rotate(-8deg); }\r\n\r\n  .panel-imagen { width: 100%; height: 150px; object-fit: cover; display: block; border-radius: 8px; margin-bottom: 10px; }\r\n\r\n  .panel-cuerpo { padding: 16px 16px 6px; overflow-y: auto; flex: 1; min-height: 0; }\r\n  .panel-cuerpo h3 { margin: 0 0 6px; font-size: 16px; color: #222; }\r\n  .panel-cuerpo p { margin: 0; font-size: 13px; color: #666; line-height: 1.5; }\r\n  .panel-aceptar { display: block; width: calc(100% - 32px); margin: 14px auto 16px; background: #3c6e64; color: #fff; border: none; padding: 11px 0; border-radius: 6px; font-weight: 600; font-size: 14px; cursor: pointer; transition: background 0.15s ease, transform 0.1s ease; flex-shrink: 0; }\r\n  .panel-aceptar:hover { background: #2c544c; }\r\n  .panel-aceptar:active { transform: scale(0.97); }\r\n  @media (max-width: 480px) { .panel-lateral { width: 88vw; } }\r\n\r\n  \/* ---- Popup de estacionamiento ---- *\/\r\n  .fondo-oscuro-parking { display: none; position: fixed; inset: 0; background: rgba(20,25,25,0.45); z-index: 10000; }\r\n  .fondo-oscuro-parking.activo { display: block; animation: fundido 0.2s ease; }\r\n  .popup-parking {\r\n    visibility: hidden; opacity: 0; position: fixed; top: 50%; left: 50%;\r\n    transform: translate(-50%, -45%); background: #fff; z-index: 10001;\r\n    width: 300px; max-width: 85vw; border-radius: 16px; padding: 28px 22px 22px;\r\n    text-align: center; box-shadow: 0 12px 40px rgba(0,0,0,0.35);\r\n    transition: opacity 0.2s cubic-bezier(0.16, 1, 0.3, 1), transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), visibility 0.2s;\r\n  }\r\n  .popup-parking.activo { visibility: visible; opacity: 1; transform: translate(-50%, -50%); }\r\n  .popup-parking-icono { font-size: 34px; margin-bottom: 8px; }\r\n  .popup-parking h3 { margin: 0 0 8px; font-size: 16px; color: #222; }\r\n  .popup-parking p { margin: 0 0 18px; font-size: 13px; color: #666; line-height: 1.5; }\r\n  .popup-parking-cerrar { background: #3c6e64; color: #fff; border: none; padding: 10px 22px; border-radius: 20px; font-weight: 600; font-size: 13px; cursor: pointer; transition: background 0.15s ease, transform 0.1s ease; }\r\n  .popup-parking-cerrar:hover { background: #2c544c; }\r\n  .popup-parking-cerrar:active { transform: scale(0.96); }\r\n\r\n  \/* Respeta a quienes prefieren menos movimiento *\/\r\n  @media (prefers-reduced-motion: reduce) {\r\n    .contenedor-mapa, .icono-flotante, .punto-mapa, .fondo-oscuro, .fondo-oscuro-parking, .popup-parking {\r\n      animation: none !important;\r\n      opacity: 1 !important;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\nwindow.QuantumMapa = window.QuantumMapa || { puntoPartida: null, pintarUstedAqui: null };\r\n\r\n(function () {\r\n  \/\/ ---- Coordenadas de cada punto en el mapa (porcentaje top\/left) ----\r\n  var POSICIONES = {\r\n    \"1\": { top: 19.6, left: 2.6,  generic: false },\r\n    A:   { top: 33.0, left: 11.3, generic: false },\r\n    B:   { top: 32.6, left: 17.6, generic: false },\r\n    C:   { top: 28.8, left: 25.1, generic: false },\r\n    D:   { top: 55.0, left: 18.3, generic: false },\r\n    E:   { top: 62.7, left: 23.6, generic: false },\r\n    F:   { top: 45.0, left: 26.2, generic: false },\r\n    G:   { top: 44.7, left: 34.9, generic: false },\r\n    H:   { top: 45.6, left: 42.9, generic: false },\r\n    I:   { top: 34.7, left: 48.0, generic: false },\r\n    J:   { top: 55.6, left: 73.1, generic: false },\r\n    K:   { top: 54.4, left: 90.9, generic: false },\r\n    M:   { top: 35.5, left: 40.2, generic: false },\r\n    N:   { top: 70.7, left: 26.2, generic: false },\r\n    O:   { top: 81.0, left: 18.3, generic: false },\r\n    L1:  { top: 24.2, left: 19.5, generic: true },\r\n    L2:  { top: 29.3, left: 28.4, generic: true },\r\n    L3:  { top: 31.0, left: 32.3, generic: true },\r\n    L4:  { top: 45.7, left: 49.7, generic: true },\r\n    L5:  { top: 51.4, left: 11.3, generic: true },\r\n    L6:  { top: 56.5, left: 31.2, generic: true },\r\n    L7:  { top: 66.1, left: 35.1, generic: true },\r\n    L8:  { top: 53.1, left: 68.1, generic: true },\r\n    L9:  { top: 52.6, left: 96.2, generic: true },\r\n    L10: { top: 23.5, left: 22.3, generic: true },\r\n    L11: { top: 48.5, left: 30.0, generic: true },\r\n    L12: { top: 28.6, left: 50.5, generic: true }\r\n  };\r\n\r\n  \/\/ ---- Informaci\u00f3n de cada edificio \/ punto ----\r\n  var EDIFICIOS = {\r\n    \"1\": { nombre: \"Entrada a Quantum\", descripcion: \"Entrada principal\", imagen: \"\" },\r\n    A:   { nombre: \"IMSS\", nombreCompleto: \"CENTRO DE INVESTIGACI\u00d3N EN BIOMEDICINA MOLECULAR (IMSS)\", descripcion: \"Centro de alta tecnolog\u00eda especializado en biolog\u00eda molecular, dedicado a la investigaci\u00f3n, patentamiento y diagn\u00f3stico de enfermedades respiratorias infecciosas.\" },\r\n    B:   { nombre: \"Cl\u00faster, Minero\", descripcion: \"Asociaci\u00f3n sin fines de lucro que vincula a la industria minera, la academia y el gobierno para impulsar la inversi\u00f3n, la innovaci\u00f3n y el desarrollo regional sostenible.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/12538b64-94e7-48f3-96f1-6fc742376c91.jpg\" },\r\n    C:   { nombre: \"PHOTON\", nombreCompleto: \"PHOTON INNOVATION HUB\", descripcion: \"Ecosistema de innovaci\u00f3n y emprendimiento tecnol\u00f3gico de diez niveles, dise\u00f1ado para vincular a la academia, el sector productivo y organismos estrat\u00e9gicos en el desarrollo de proyectos tecnol\u00f3gicos aplicados.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/2e9b76b4-c2aa-4cb2-87eb-7eb48a8800c4.png\" },\r\n    D:   { nombre: \"FID\", nombreCompleto: \"FRISCO INVESTIGACION Y DESARROLLO (FID)\", descripcion: \"Centro especializado en geolog\u00eda, minado y an\u00e1lisis metal\u00fargico orientado a elevar la eficiencia y rentabilidad minera.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/e30b42df-bf4c-4a39-bfd3-650ebc29e857-1.png\" },\r\n    E:   { nombre: \"AEM\", nombreCompleto: \"CENTRO DE DESARROLLO ESPACIAL DEL ESTADO DE ZACATECAS (AEM)\", descripcion: \"Centro de I+D en telecomunicaciones y electr\u00f3nica espacial, especializado en rob\u00f3tica, IoT y radiofrecuencia para el desarrollo de soluciones tecnol\u00f3gicas de impacto p\u00fablico y productivo.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/b5491a37-bb70-4e1a-9bd0-78dae88a8b41-1.png\" },\r\n    F:   { nombre: \"CIMAT\", nombreCompleto: \"CENTRO DE INVESTIGACI\u00d3N EN MATEM\u00c1TICAS (CIMAT ZACATECAS)\", descripcion: \"Centro p\u00fablico de investigaci\u00f3n e innovaci\u00f3n en software, rob\u00f3tica e inteligencia artificial, enfocado en la formaci\u00f3n de posgrado y el desarrollo de proyectos de impacto regional.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/a1373fd5-2d26-45dc-ad26-7232edf13e5a-1-scaled.jpg\" },\r\n    G:   { nombre: \"LASEC\", nombreCompleto: \"LASEC TECHNOLOGY SISTEMS \", descripcion: \"Centro internacional de desarrollo tecnol\u00f3gico especializado en telecomunicaciones y digitalizaci\u00f3n minera, orientado a maximizar la seguridad operativa y la eficiencia industrial mediante redes privadas, telemetr\u00eda y rastreo.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/4b3f59d7-b7cb-4eb5-99ac-0c4e42f13362-1.jpg\" },\r\n    H:   { nombre: \"COMPULOGIC\", nombreCompleto: \"Centro de Investigaci\u00f3n y Desarrollo de Soluciones de Tecnolog\u00edas de la Informaci\u00f3n, Comunicaciones e Ingenier\u00eda de Software del Estado de zacatecas.\", descripcion: \"Centro de innovaci\u00f3n en TIC e ingenier\u00eda de software, enfocado en IA, rob\u00f3tica y biotecnolog\u00eda para desarrollar soluciones en agroindustria, ciudades inteligentes, seguridad y automatizaci\u00f3n.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/4778ffba-e370-4cad-812a-038d2072ec7e.png\" },\r\n    I:   { nombre: \"SOLARIC\", nombreCompleto: \"\", descripcion: \"Informaci\u00f3n resumida del edificio\", imagen: \"\" },\r\n    J:   { nombre: \"LAB UAZ\", nombreCompleto: \"LABORATORIOS DE LA UAZ\", descripcion: \"Sede universitaria de docencia e investigaci\u00f3n avanzada, especializada en manufactura, sistemas h\u00eddricos y ciencia y tecnolog\u00eda de la luz y la materia.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/b6b50260-6779-44a8-8f08-1b11a3b90e56.png\" },\r\n    K:   { nombre: \"TERRA CORP\", nombreCompleto: \"TERRA CORPORACI\u00d3N Centro de Capacitaci\u00f3n en Voladuras y Explosivos\", descripcion: \"Centro especializado en log\u00edstica, capacitaci\u00f3n y certificaci\u00f3n en explosivos y voladuras mineras, enfocado en impulsar la seguridad y la profesionalizaci\u00f3n del sector.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/d863318f-46c7-4825-aa58-dc48e6cd83f8.png\" },\r\n    M:   { nombre: \"CAPACITACION CLUS MIN\", nombreCompleto: \"\", descripcion: \"Informaci\u00f3n resumida del edificio\", imagen: \"\" },\r\n    N:   { nombre: \"AREA DE JUEGOS\", descripcion: \"Informaci\u00f3n resumida del edificio\", imagen: \"\" },\r\n    O:   { nombre: \"Ecoparque\", descripcion: \"Disponible pr\u00f3ximamente\", imagen: \"\" },\r\n    L1:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L2:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L3:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L4:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L5:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L6:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L7:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L8:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L9:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L10: { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L11: { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L12: { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" }\r\n  };\r\n\r\n  var ESPECIALES = [\"1\", \"N\", \"O\", \"M\"];\r\n  var container = document.getElementById(\"contenedor-mapa\");\r\n\r\n  \/\/ ---- Creaci\u00f3n de los botones (puntos) sobre el mapa ----\r\n  function crearBotones() {\r\n    var indice = 0;\r\n    Object.keys(POSICIONES).forEach(function (id) {\r\n      var pos = POSICIONES[id];\r\n      var btn = document.createElement(\"button\");\r\n      var cls = \"punto-mapa\";\r\n      if (pos.generic) cls += \" punto-generico\";\r\n      else if (ESPECIALES.indexOf(id) !== -1) cls += \" punto-especial\";\r\n      btn.className = cls;\r\n      btn.style.top = pos.top + \"%\";\r\n      btn.style.left = pos.left + \"%\";\r\n      btn.style.setProperty(\"--retraso\", (0.15 + indice * 0.025) + \"s\");\r\n      btn.dataset.id = id;\r\n      btn.textContent = id.replace(\/[0-9]\/g, \"\") || id;\r\n      container.appendChild(btn);\r\n      indice++;\r\n\r\n      btn.addEventListener(\"click\", function () {\r\n        if (pos.generic) { abrirPopupParking(); return; }\r\n        abrirPanel(id);\r\n      });\r\n    });\r\n  }\r\n  crearBotones();\r\n\r\n  \/\/ ---- Panel lateral de informaci\u00f3n de edificio ----\r\n  var overlay = document.getElementById(\"fondo-oscuro\");\r\n  var panel = document.getElementById(\"panel-lateral\");\r\n  var closeBtn = document.getElementById(\"panel-cerrar\");\r\n  var acceptBtn = document.getElementById(\"panel-aceptar\");\r\n\r\n  function abrirPanel(id) {\r\n    var data = EDIFICIOS[id];\r\n    if (!data) return;\r\n    var letra = id.replace(\/[0-9]\/g, \"\") || id;\r\n    document.getElementById(\"panel-letra\").textContent = letra;\r\n    document.getElementById(\"panel-titulo\").textContent = data.nombre;\r\n    document.getElementById(\"panel-nombre\").textContent = data.nombreCompleto || data.nombre;\r\n    document.getElementById(\"panel-descripcion\").textContent = data.descripcion;\r\n    document.getElementById(\"panel-imagen\").src = data.imagen;\r\n    document.getElementById(\"panel-imagen\").style.display = data.imagen ? \"block\" : \"none\";\r\n    panel.dataset.currentId = id;\r\n    overlay.classList.add(\"activo\");\r\n    panel.classList.add(\"activo\");\r\n  }\r\n\r\n  function cerrarPanel() {\r\n    overlay.classList.remove(\"activo\");\r\n    panel.classList.remove(\"activo\");\r\n  }\r\n\r\n  overlay.addEventListener(\"click\", cerrarPanel);\r\n  closeBtn.addEventListener(\"click\", cerrarPanel);\r\n\r\n  \/\/ ---- Popup de estacionamiento ----\r\n  var overlayParking = document.getElementById(\"fondo-oscuro-parking\");\r\n  var popupParking = document.getElementById(\"popup-parking\");\r\n  var popupParkingCerrar = document.getElementById(\"popup-parking-cerrar\");\r\n\r\n  function abrirPopupParking() {\r\n    overlayParking.classList.add(\"activo\");\r\n    popupParking.classList.add(\"activo\");\r\n  }\r\n  function cerrarPopupParking() {\r\n    overlayParking.classList.remove(\"activo\");\r\n    popupParking.classList.remove(\"activo\");\r\n  }\r\n  overlayParking.addEventListener(\"click\", cerrarPopupParking);\r\n  popupParkingCerrar.addEventListener(\"click\", cerrarPopupParking);\r\n\r\n  \/\/ ---- Bot\u00f3n \"Aceptar\": navega a Ecoparque o pasa a la selecci\u00f3n de destino ----\r\n  acceptBtn.addEventListener(\"click\", function () {\r\n    var id = panel.dataset.currentId;\r\n    cerrarPanel();\r\n\r\n    if (id === \"O\") {\r\n      document.getElementById(\"mapa\").style.display = \"none\";\r\n      document.getElementById(\"ecoparque\").style.display = \"block\";\r\n      return;\r\n    }\r\n\r\n    window.QuantumMapa.puntoPartida = id;\r\n    window.QuantumMapa.origenPartida = \"mapa\";\r\n\r\n    document.getElementById(\"mapa-destino\").style.display = \"block\";\r\n    document.getElementById(\"ecoparque-destino\").style.display = \"none\";\r\n\r\n    document.getElementById(\"seccion-partida\").style.setProperty(\"display\", \"none\", \"important\");\r\n    document.getElementById(\"seccion-destino\").style.setProperty(\"display\", \"block\", \"important\");\r\n\r\n    if (typeof window.QuantumMapa.pintarUstedAquiMapa === \"function\") {\r\n      window.QuantumMapa.pintarUstedAquiMapa();\r\n    }\r\n    if (typeof window.QuantumMapa.pintarUstedAquiMapa2 === \"function\") {\r\n      window.QuantumMapa.pintarUstedAquiMapa2();\r\n    }\r\n  });\r\n\r\n  \/\/ ---- Estado inicial al cargar la p\u00e1gina ----\r\n  window.addEventListener(\"load\", function () {\r\n    document.getElementById(\"seccion-destino\").style.setProperty(\"display\", \"none\", \"important\");\r\n    document.getElementById(\"ecoparque\").style.display = \"none\";\r\n    document.getElementById(\"ecoparque-destino\").style.display = \"none\";\r\n  });\r\n})();\r\n<\/script>\r\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7348441 e-con-full e-flex e-con e-child\" data-id=\"7348441\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-de10086 elementor-widget elementor-widget-image\" data-id=\"de10086\" data-element_type=\"widget\" data-settings=\"{&quot;_animation_tablet&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"275\" src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-1024x275.png\" class=\"attachment-large size-large wp-image-1251\" alt=\"\" srcset=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-1024x275.png 1024w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-300x81.png 300w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-768x206.png 768w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-1536x413.png 1536w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-18x5.png 18w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-1000x269.png 1000w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-230x62.png 230w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-350x94.png 350w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-480x129.png 480w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-500x134.png 500w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-800x215.png 800w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-1280x344.png 1280w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-1920x516.png 1920w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e0e24f5 e-con-full e-flex e-con e-child\" data-id=\"e0e24f5\" data-element_type=\"container\" id=\"ecoparque\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5279832 elementor-widget elementor-widget-html\" data-id=\"5279832\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"contenedor-principal-eco\" id=\"contenedor-principal-eco\">\r\n  <div class=\"barra-herramientas-eco\">\r\n    <button id=\"btn-volver-mapa-eco\" class=\"btn-volver-mapa-eco\">Volver al mapa<\/button>\r\n  <\/div>\r\n\r\n  <!-- CONTENEDOR DEL MAPA -->\r\n  <div class=\"contenedor-mapa-eco\" id=\"contenedor-mapa-eco\">\r\n    <img decoding=\"async\"\r\n      class=\"imagen-mapa-eco\"\r\n      id=\"imagen-mapa-eco\"\r\n      src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/fondo_ecoparque.png\" \r\n    \/>\r\n  <\/div>\r\n\r\n  <div class=\"fondo-oscuro-eco\" id=\"fondo-oscuro-eco\"><\/div>\r\n\r\n  <!-- PANEL LATERAL -->\r\n  <aside class=\"panel-lateral-eco\" id=\"panel-lateral-eco\">\r\n    <div class=\"panel-cabecera-eco\">\r\n      <span class=\"panel-letra-eco\" id=\"panel-letra-eco\">A<\/span>\r\n      <span class=\"panel-titulo-eco\" id=\"panel-titulo-eco\">EDIFICIO<\/span>\r\n      <button class=\"panel-cerrar-eco\" id=\"panel-cerrar-eco\" aria-label=\"Cerrar\">&#8617;<\/button>\r\n    <\/div>\r\n    <img decoding=\"async\" class=\"panel-imagen-eco\" id=\"panel-imagen-eco\" src=\"\" alt=\"\" \/>\r\n    <div class=\"panel-cuerpo-eco\">\r\n      <h3 id=\"panel-nombre-eco\">EDIFICIO<\/h3>\r\n      <p id=\"panel-descripcion-eco\">Informaci\u00f3n resumida del edificio<\/p>\r\n    <\/div>\r\n    <button class=\"panel-aceptar-eco\" id=\"panel-aceptar-eco\">Aceptar<\/button>\r\n  <\/aside>\r\n\r\n  <!-- POPUP DE ZONA EN CONSTRUCCI\u00d3N -->\r\n  <div class=\"fondo-oscuro-construccion-eco\" id=\"fondo-oscuro-construccion-eco\"><\/div>\r\n  <div class=\"popup-construccion-eco\" id=\"popup-construccion-eco\">\r\n    <div class=\"popup-construccion-eco-icono\">\ud83d\udea7<\/div>\r\n    <h3>Zona en construcci\u00f3n<\/h3>\r\n    <p>Esta \u00e1rea del Ecoparque se encuentra actualmente en construcci\u00f3n. Pronto estar\u00e1 disponible.<\/p>\r\n    <button id=\"popup-construccion-eco-cerrar\" class=\"popup-construccion-eco-cerrar\">Entendido<\/button>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  .contenedor-principal-eco {\r\n    font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;\r\n    width: 100%;\r\n    max-width: 100%;\r\n    margin: 0 auto;\r\n    position: relative;\r\n  }\r\n\r\n  .barra-herramientas-eco { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }\r\n\r\n  .btn-volver-mapa-eco {\r\n    background: #3c6e64; color: #fff; border: none; padding: 8px 16px; border-radius: 20px;\r\n    font-weight: 600; font-size: 12.5px; cursor: pointer; margin-left: auto;\r\n  }\r\n  .btn-volver-mapa-eco:hover { background: #2c544c; }\r\n\r\n  .contenedor-mapa-eco {\r\n    position: relative; width: 100%; border-radius: 10px;\r\n    overflow: hidden; box-shadow: 0 4px 18px rgba(0,0,0,0.15);\r\n  }\r\n  .imagen-mapa-eco { width: 100%; display: block; user-select: none; -webkit-user-drag: none; }\r\n\r\n  \/* ---- Puntos del mapa (edificios y estacionamientos) ---- *\/\r\n  .punto-mapa-eco {\r\n    position: absolute;\r\n    width: 30px;\r\n    height: 30px;\r\n    border-radius: 50%;\r\n    background: linear-gradient(180deg, #48968C 0%, #2a5e60 100%);\r\n    border: 2px solid #fff;\r\n    color: #fff;\r\n    font-weight: bold;\r\n    font-size: 13px;\r\n    cursor: pointer;\r\n    transform: translate(-50%, -50%);\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.2);\r\n    transition: transform 0.2s ease, filter 0.2s ease;\r\n    display: flex; align-items: center; justify-content: center;\r\n    padding: 0; z-index: 5;\r\n  }\r\n\r\n  .punto-mapa-eco.punto-generico-eco {\r\n    background: linear-gradient(180deg, #62828C 0%, #A4BDD1 100%);\r\n    font-size: 11px;\r\n  }\r\n\r\n  .punto-mapa-eco.punto-especial-eco {\r\n    background: linear-gradient(180deg, #585F7C 0%, #618BA9 100%);\r\n  }\r\n\r\n  .punto-mapa-eco:hover {\r\n    transform: translate(-50%, -50%) scale(1.15);\r\n    filter: brightness(1.2);\r\n  }\r\n\r\n  \/* ---- Fondo oscuro y panel lateral de informaci\u00f3n ---- *\/\r\n  .fondo-oscuro-eco {\r\n    display: none; position: fixed; inset: 0;\r\n    background: rgba(20,25,25,0.35); z-index: 9998;\r\n  }\r\n  .fondo-oscuro-eco.activo-eco { display: block; }\r\n\r\n  .panel-lateral-eco {\r\n    position: fixed; top: 0; right: 0; height: 100%; width: 300px; max-width: 85vw;\r\n    background: #fff; z-index: 9999; box-shadow: -8px 0 28px rgba(0,0,0,0.3);\r\n    border-radius: 16px 0 0 16px; overflow: hidden; display: flex; flex-direction: column;\r\n    transform: translateX(100%);\r\n    transition: transform 0.28s ease;\r\n  }\r\n  .panel-lateral-eco.activo-eco { transform: translateX(0); }\r\n\r\n  .panel-cabecera-eco {\r\n    background: #3c6e64; color: #fff; display: flex; align-items: center;\r\n    padding: 14px 12px; gap: 10px; flex-shrink: 0;\r\n  }\r\n  .panel-letra-eco {\r\n    width: 30px; height: 30px; border-radius: 50%; background: #fff; color: #3c6e64;\r\n    display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 14px; flex-shrink: 0;\r\n  }\r\n  .panel-titulo-eco { flex: 1; font-weight: 700; letter-spacing: 0.5px; font-size: 15px; text-transform: uppercase; }\r\n  .panel-cerrar-eco {\r\n    background: #fff; border: none; color: #3c6e64; width: 30px; height: 30px; border-radius: 50%;\r\n    cursor: pointer; font-size: 15px; line-height: 1; display: flex; align-items: center; justify-content: center; flex-shrink: 0;\r\n  }\r\n  .panel-cerrar-eco:hover { background: #eaeaea; }\r\n\r\n  .panel-imagen-eco { width: 100%; height: 150px; object-fit: cover; display: block; flex-shrink: 0; }\r\n  .panel-cuerpo-eco { padding: 16px 16px 6px; overflow-y: auto; flex: 1; }\r\n  .panel-cuerpo-eco h3 { margin: 0 0 6px; font-size: 16px; color: #222; }\r\n  .panel-cuerpo-eco p { margin: 0; font-size: 13px; color: #666; line-height: 1.5; }\r\n\r\n  .panel-aceptar-eco {\r\n    display: block; width: calc(100% - 32px); margin: 14px auto 16px; background: #3c6e64;\r\n    color: #fff; border: none; padding: 11px 0; border-radius: 6px; font-weight: 600;\r\n    font-size: 14px; cursor: pointer; transition: background 0.15s ease; flex-shrink: 0;\r\n  }\r\n  .panel-aceptar-eco:hover { background: #2c544c; }\r\n\r\n  @media (max-width: 480px) { .panel-lateral-eco { width: 88vw; } }\r\n\r\n  \/* ---- Popup de zona en construcci\u00f3n ---- *\/\r\n  .fondo-oscuro-construccion-eco { display: none; position: fixed; inset: 0; background: rgba(20,25,25,0.45); z-index: 10000; }\r\n  .fondo-oscuro-construccion-eco.activo-eco { display: block; }\r\n  .popup-construccion-eco {\r\n    visibility: hidden; opacity: 0; position: fixed; top: 50%; left: 50%;\r\n    transform: translate(-50%, -45%); background: #fff; z-index: 10001;\r\n    width: 300px; max-width: 85vw; border-radius: 16px; padding: 28px 22px 22px;\r\n    text-align: center; box-shadow: 0 12px 40px rgba(0,0,0,0.35);\r\n    transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s;\r\n  }\r\n  .popup-construccion-eco.activo-eco { visibility: visible; opacity: 1; transform: translate(-50%, -50%); }\r\n  .popup-construccion-eco-icono { font-size: 34px; margin-bottom: 8px; }\r\n  .popup-construccion-eco h3 { margin: 0 0 8px; font-size: 16px; color: #222; }\r\n  .popup-construccion-eco p { margin: 0 0 18px; font-size: 13px; color: #666; line-height: 1.5; }\r\n  .popup-construccion-eco-cerrar { background: #3c6e64; color: #fff; border: none; padding: 10px 22px; border-radius: 20px; font-weight: 600; font-size: 13px; cursor: pointer; transition: background 0.15s ease; }\r\n  .popup-construccion-eco-cerrar:hover { background: #2c544c; }\r\n<\/style>\r\n\r\n<script>\r\nwindow.QuantumMapa = window.QuantumMapa || { puntoPartida: null, pintarUstedAqui: null };\r\n\r\n(function () {\r\n  \/\/ ---- Coordenadas de cada punto en el mapa (porcentaje top\/left) ----\r\n  var POSICIONES = {\r\n    A:   { top: 29.4, left: 78.6, generic: false },\r\n    B:   { top: 51.9, left: 39.8, generic: false },\r\n    C:   { top: 58.3, left: 54.5, generic: false },\r\n    D:   { top: 77.3, left: 34.5, generic: false },\r\n    E:   { top: 67.5, left: 47.5, generic: false },\r\n    F:   { top: 44.8, left: 16.9, generic: false },\r\n    G:   { top: 88.5, left: 24.4, generic: false },\r\n    H:   { top: 33.9, left: 17.3, generic: false },\r\n    I:   { top: 41.3, left: 9.0,  generic: false },\r\n    J:   { top: 88.9, left: 48.0, generic: false },\r\n    K:   { top: 58.9, left: 84.8, generic: false },\r\n    M:   { top: 65.1, left: 93.1, generic: false },\r\n    L1:  { top: 53.7, left: 8.1,  generic: true },\r\n    L2:  { top: 59.1, left: 18.3, generic: true },\r\n    L3:  { top: 71.1, left: 17.2, generic: true },\r\n    L4:  { top: 62.1, left: 29.4, generic: true },\r\n    L5:  { top: 69.2, left: 66.4, generic: true }\r\n  };\r\n\r\n  \/\/ ---- Informaci\u00f3n de cada zona ----\r\n  var EDIFICIOS = {\r\n    A: { nombre: \" Estacionamiento\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    B: { nombre: \"Plaza de acceso\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    C: { nombre: \"Caseta de vigilancia\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    D: { nombre: \"Servicios sanitorios\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    E: { nombre: \"Aula ambiental\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    F: { nombre: \"Modulo de venta\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    G: { nombre: \"Herbario\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    H: { nombre: \"Vivero\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    I: { nombre: \" Almac\u00e9n de semillas\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    J: { nombre: \"Modulo de interpretaci\u00f3n de fauna\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    K: { nombre: \"\u00c1rea de talleres al exterior\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    M: { nombre: \" Patio de maniobras\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    L1: { nombre: \"Nichos de extudio\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    L2: { nombre: \"Nichos de estudio\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    L3: { nombre: \"Nichos de estudio\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    L4: { nombre: \"Nichos de estudio\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    L5: { nombre: \"Nichos de estudio\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" }\r\n  };\r\n\r\n  var ESPECIALES = [\"C\"];\r\n\r\n  var container = document.getElementById(\"contenedor-mapa-eco\");\r\n\r\n  \/\/ ---- Creaci\u00f3n de los botones (puntos) sobre el mapa ----\r\n  \/\/ Por ahora, todos los puntos abren el aviso de \"zona en construcci\u00f3n\"\r\n  \/\/ en vez del panel de informaci\u00f3n (Ecoparque a\u00fan no tiene rutas).\r\n  function crearBotones() {\r\n    Object.keys(POSICIONES).forEach(function (id) {\r\n      var pos = POSICIONES[id];\r\n      var btn = document.createElement(\"button\");\r\n\r\n      var cls = \"punto-mapa-eco\";\r\n      if (pos.generic) {\r\n        cls += \" punto-generico-eco\";\r\n      } else if (ESPECIALES.indexOf(id) !== -1) {\r\n        cls += \" punto-especial-eco\";\r\n      }\r\n      btn.className = cls;\r\n      btn.style.top = pos.top + \"%\";\r\n      btn.style.left = pos.left + \"%\";\r\n      btn.dataset.id = id;\r\n\r\n      btn.textContent = id.replace(\/[0-9]\/g, \"\") || id;\r\n      container.appendChild(btn);\r\n\r\n      btn.addEventListener(\"click\", function (e) {\r\n        abrirPopupConstruccion();\r\n      });\r\n    });\r\n  }\r\n  crearBotones();\r\n\r\n  \/\/ ---- Panel lateral de informaci\u00f3n de zona ----\r\n  \/\/ No se usa mientras el Ecoparque est\u00e9 en construcci\u00f3n; se deja listo\r\n  \/\/ por si el panel se reactiva en otro contexto m\u00e1s adelante.\r\n  var overlay = document.getElementById(\"fondo-oscuro-eco\");\r\n  var panel = document.getElementById(\"panel-lateral-eco\");\r\n  var closeBtn = document.getElementById(\"panel-cerrar-eco\");\r\n  var acceptBtn = document.getElementById(\"panel-aceptar-eco\");\r\n\r\n  function abrirPanel(id) {\r\n    var data = EDIFICIOS[id];\r\n    if (!data) return;\r\n    var letra = id.replace(\/[0-9]\/g, \"\") || id;\r\n\r\n    document.getElementById(\"panel-letra-eco\").textContent = letra;\r\n    document.getElementById(\"panel-titulo-eco\").textContent = data.nombre;\r\n    document.getElementById(\"panel-nombre-eco\").textContent = data.nombre;\r\n    document.getElementById(\"panel-descripcion-eco\").textContent = data.descripcion;\r\n    document.getElementById(\"panel-imagen-eco\").src = data.imagen;\r\n    document.getElementById(\"panel-imagen-eco\").style.display = data.imagen ? \"block\" : \"none\";\r\n\r\n    panel.dataset.currentId = id;\r\n    overlay.classList.add(\"activo-eco\");\r\n    panel.classList.add(\"activo-eco\");\r\n  }\r\n\r\n  function cerrarPanel() {\r\n    overlay.classList.remove(\"activo-eco\");\r\n    panel.classList.remove(\"activo-eco\");\r\n  }\r\n\r\n  overlay.addEventListener(\"click\", cerrarPanel);\r\n  closeBtn.addEventListener(\"click\", cerrarPanel);\r\n\r\n  acceptBtn.addEventListener(\"click\", function () {\r\n    var id = panel.dataset.currentId;\r\n\r\n    window.QuantumMapa.puntoPartida = id;\r\n    window.QuantumMapa.origenPartida = \"ecoparque\"; \r\n    cerrarPanel();\r\n\r\n    document.getElementById(\"mapa-destino\").style.display = \"none\";\r\n    document.getElementById(\"ecoparque-destino\").style.display = \"block\";\r\n\r\n    document.getElementById(\"seccion-partida\").style.setProperty(\"display\", \"none\", \"important\");\r\n    document.getElementById(\"seccion-destino\").style.setProperty(\"display\", \"block\", \"important\");\r\n\r\n    if (typeof window.QuantumMapa.pintarUstedAquiEcoparque === \"function\") {\r\n      window.QuantumMapa.pintarUstedAquiEcoparque();\r\n    }\r\n  });\r\n\r\n  \/\/ ---- Popup de zona en construcci\u00f3n ----\r\n  var overlayConstruccion = document.getElementById(\"fondo-oscuro-construccion-eco\");\r\n  var popupConstruccion = document.getElementById(\"popup-construccion-eco\");\r\n  var popupConstruccionCerrar = document.getElementById(\"popup-construccion-eco-cerrar\");\r\n\r\n  function abrirPopupConstruccion() {\r\n    overlayConstruccion.classList.add(\"activo-eco\");\r\n    popupConstruccion.classList.add(\"activo-eco\");\r\n  }\r\n  function cerrarPopupConstruccion() {\r\n    overlayConstruccion.classList.remove(\"activo-eco\");\r\n    popupConstruccion.classList.remove(\"activo-eco\");\r\n  }\r\n  overlayConstruccion.addEventListener(\"click\", cerrarPopupConstruccion);\r\n  popupConstruccionCerrar.addEventListener(\"click\", cerrarPopupConstruccion);\r\n\r\n  \/\/ ---- Bot\u00f3n \"Volver al mapa\" ----\r\n  document.getElementById(\"btn-volver-mapa-eco\").addEventListener(\"click\", function () {\r\n    document.getElementById(\"ecoparque\").style.display = \"none\";\r\n    document.getElementById(\"mapa\").style.display = \"block\";\r\n  });\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6bd521a e-con-full e-flex e-con e-child\" data-id=\"6bd521a\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ac41ecd elementor-widget elementor-widget-image\" data-id=\"ac41ecd\" data-element_type=\"widget\" data-settings=\"{&quot;_animation_tablet&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"275\" src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-1024x275.jpg\" class=\"attachment-large size-large wp-image-1210\" alt=\"\" srcset=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-1024x275.jpg 1024w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-300x81.jpg 300w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-768x206.jpg 768w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-1536x413.jpg 1536w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-18x5.jpg 18w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-1000x269.jpg 1000w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-230x62.jpg 230w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-350x94.jpg 350w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-480x129.jpg 480w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-500x134.jpg 500w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-800x215.jpg 800w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-1280x344.jpg 1280w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-1920x516.jpg 1920w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque.jpg 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-431f368 e-flex e-con-boxed e-con e-parent\" data-id=\"431f368\" data-element_type=\"container\" id=\"seccion-destino\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-30d83ca cuadro-cortado e-con-full e-flex e-con e-child\" data-id=\"30d83ca\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-346706e elementor-widget-mobile__width-initial elementor-widget elementor-widget-heading\" data-id=\"346706e\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\u00bfa d\u00f3nde quieres llegar?<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ca6fa2a e-con-full e-flex e-con e-child\" data-id=\"ca6fa2a\" data-element_type=\"container\" id=\"mapa-destino\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3a9f671 elementor-widget elementor-widget-html\" data-id=\"3a9f671\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"contenedor-principal2\" id=\"contenedor-principal2\">\r\n  <div class=\"barra-herramientas2\">\r\n    <button id=\"btn-cambiar-partida2\" class=\"btn-cambiar-partida2\">Cambiar punto de partida<\/button>\r\n  <\/div>\r\n\r\n  <!-- CONTENEDOR DEL MAPA -->\r\n  <div class=\"contenedor-mapa2\" id=\"contenedor-mapa2\">\r\n    <img decoding=\"async\"\r\n      class=\"imagen-mapa2\"\r\n      id=\"imagen-mapa2\"\r\n      src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/fondo_quantum-scaled.png\"\r\n      alt=\"Mapa Quantum Ciudad del Conocimiento\"\r\n    \/>\r\n\r\n    <!-- ICONO FLOTANTE SOBRE EL PUNTO 1 -->\r\n    <img decoding=\"async\"\r\n      class=\"icono-flotante2\"\r\n      id=\"icono-flotante2\"\r\n      src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/entrada_quantum.png\"\r\n      alt=\"Entrada\"\r\n    \/>\r\n  <\/div>\r\n\r\n  <div class=\"fondo-oscuro2\" id=\"fondo-oscuro2\"><\/div>\r\n\r\n  <!-- PANEL LATERAL -->\r\n  <aside class=\"panel-lateral2\" id=\"panel-lateral2\">\r\n    <div class=\"panel-cabecera2\">\r\n      <span class=\"panel-letra2\" id=\"panel-letra2\">C<\/span>\r\n      <span class=\"panel-titulo2\" id=\"panel-titulo2\">PHOTON<\/span>\r\n      <button class=\"panel-cerrar2\" id=\"panel-cerrar2\" aria-label=\"Cerrar\">&#8617;<\/button>\r\n    <\/div>\r\n    <div class=\"panel-cuerpo2\">\r\n      <img decoding=\"async\" class=\"panel-imagen2\" id=\"panel-imagen2\" src=\"\" alt=\"\" \/>\r\n      <h3 id=\"panel-nombre2\">PHOTON<\/h3>\r\n      <p id=\"panel-descripcion2\">Informaci\u00f3n resumida del edificio<\/p>\r\n    <\/div>\r\n    <button class=\"panel-aceptar2\" id=\"panel-aceptar2\">Aceptar<\/button>\r\n  <\/aside>\r\n\r\n  <!-- POPUP DE ESTACIONAMIENTO -->\r\n  <div class=\"fondo-oscuro-parking2\" id=\"fondo-oscuro-parking2\"><\/div>\r\n  <div class=\"popup-parking2\" id=\"popup-parking2\">\r\n    <div class=\"popup-parking2-icono\">\ud83c\udd7f\ufe0f<\/div>\r\n    <h3>Estacionamiento<\/h3>\r\n    <p>Este espacio es de uso exclusivo para personal que labora en Quantum Ciudad del Conocimiento.<\/p>\r\n    <button id=\"popup-parking2-cerrar\" class=\"popup-parking2-cerrar\">Entendido<\/button>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  .contenedor-principal2 {\r\n    font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;\r\n    width: 100%;\r\n    max-width: 100%;\r\n    margin: 0 auto;\r\n    position: relative;\r\n  }\r\n  .barra-herramientas2 { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }\r\n\r\n  .btn-cambiar-partida2 {\r\n    background: #3c6e64; color: #fff; border: none; padding: 8px 16px; border-radius: 20px;\r\n    font-weight: 600; font-size: 12.5px; cursor: pointer; margin-left: auto;\r\n    transition: background 0.15s ease, transform 0.1s ease;\r\n  }\r\n  .btn-cambiar-partida2:hover { background: #2c544c; }\r\n  .btn-cambiar-partida2:active { transform: scale(0.97); }\r\n\r\n  \/* overflow visible para que el icono y el pin \"usted est\u00e1 aqu\u00ed\" puedan salir del contenedor *\/\r\n  .contenedor-mapa2 {\r\n    position: relative; width: 100%; overflow: visible; box-shadow: 0 4px 18px rgba(0,0,0,0.15);\r\n    border-radius: 10px;\r\n    opacity: 0;\r\n    animation: aparecerMapa2 0.7s cubic-bezier(0.16, 1, 0.3, 1) forwards;\r\n  }\r\n  .imagen-mapa2 { width: 100%; display: block; user-select: none; -webkit-user-drag: none; border-radius: 10px; }\r\n\r\n  \/* ---- Entrada del mapa ---- *\/\r\n  @keyframes aparecerMapa2 {\r\n    from { opacity: 0; transform: scale(0.97); }\r\n    to   { opacity: 1; transform: scale(1); }\r\n  }\r\n\r\n  \/* ---- Icono flotante sobre el punto 1 ---- *\/\r\n  .icono-flotante2 {\r\n    position: absolute;\r\n    top: 19.6%;\r\n    left: 2.6%;\r\n    width: 9%;\r\n    max-width: 70px;\r\n    min-width: 30px;\r\n    transform: translate(-50%, calc(-100% - 14px));\r\n    pointer-events: none;\r\n    user-select: none;\r\n    -webkit-user-drag: none;\r\n    filter: drop-shadow(0 6px 10px rgba(0,0,0,0.28));\r\n    opacity: 0;\r\n    animation:\r\n      aparecerIcono2 0.6s cubic-bezier(0.16, 1, 0.3, 1) 0.5s forwards,\r\n      flotar2 3.2s ease-in-out 1.1s infinite;\r\n    z-index: 6;\r\n  }\r\n\r\n  @keyframes aparecerIcono2 {\r\n    from { opacity: 0; transform: translate(-50%, calc(-100% - 14px)) scale(0.6); }\r\n    to   { opacity: 1; transform: translate(-50%, calc(-100% - 14px)) scale(1); }\r\n  }\r\n\r\n  @keyframes flotar2 {\r\n    0%, 100% { transform: translate(-50%, calc(-100% - 14px)); }\r\n    50%      { transform: translate(-50%, calc(-100% - 22px)); }\r\n  }\r\n\r\n  \/* ---- Puntos del mapa (botones de edificios y estacionamientos) ---- *\/\r\n  .punto-mapa2 {\r\n    position: absolute; width: 26px; height: 26px; border-radius: 50%;\r\n    background: linear-gradient(180deg, #48968C 0%, #2a5e60 100%);\r\n    border: 2px solid; color: #fff; font-weight: bold; font-size: 13px; cursor: pointer;\r\n    transform: translate(-50%, -50%); box-shadow: 0 2px 4px rgba(0,0,0,0.2);\r\n    transition: transform 0.2s ease, filter 0.2s ease;\r\n    display: flex; align-items: center; justify-content: center;\r\n    padding: 0; z-index: 5;\r\n    opacity: 0;\r\n    animation: aparecerPunto2 0.45s cubic-bezier(0.16, 1, 0.3, 1) forwards;\r\n    animation-delay: var(--retraso, 0s);\r\n  }\r\n  .punto-mapa2.punto-generico2 { background: linear-gradient(180deg, #62828C 0%, #A4BDD1 100%); font-size: 11px; }\r\n  .punto-mapa2.punto-especial2 { background: linear-gradient(180deg, #585F7C 0%, #618BA9 100%); }\r\n  .punto-mapa2:hover { transform: translate(-50%, -50%) scale(1.15); filter: brightness(1.2); }\r\n\r\n  @keyframes aparecerPunto2 {\r\n    from { opacity: 0; transform: translate(-50%, -50%) scale(0.3); }\r\n    to   { opacity: 1; transform: translate(-50%, -50%) scale(1); }\r\n  }\r\n\r\n  \/* ---- Fondo oscuro y panel lateral de informaci\u00f3n de edificio ---- *\/\r\n  .fondo-oscuro2 { display: none; position: fixed; inset: 0; background: rgba(20,25,25,0.35); z-index: 9998; }\r\n  .fondo-oscuro2.activo2 { display: block; animation: fundido2 0.2s ease; }\r\n\r\n  @keyframes fundido2 {\r\n    from { opacity: 0; }\r\n    to   { opacity: 1; }\r\n  }\r\n\r\n  .panel-lateral2 {\r\n    position: fixed; top: 0; right: 0; height: 100%; width: 300px; max-width: 85vw;\r\n    background: #fff; z-index: 9999; box-shadow: -8px 0 28px rgba(0,0,0,0.3);\r\n    border-radius: 16px 0 0 16px; overflow: hidden; display: flex; flex-direction: column;\r\n    transform: translateX(100%); transition: transform 0.28s cubic-bezier(0.16, 1, 0.3, 1);\r\n  }\r\n  .panel-lateral2.activo2 { transform: translateX(0); }\r\n  .panel-cabecera2 { background: #3c6e64; color: #fff; display: flex; align-items: center; padding: 14px 12px; gap: 10px; flex-shrink: 0; }\r\n  .panel-letra2 { width: 30px; height: 30px; border-radius: 50%; background: #fff; color: #3c6e64; display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 14px; flex-shrink: 0; }\r\n  .panel-titulo2 { flex: 1; font-weight: 700; letter-spacing: 0.5px; font-size: 15px; text-transform: uppercase; }\r\n  .panel-cerrar2 { background: #fff; border: none; color: #3c6e64; width: 30px; height: 30px; border-radius: 50%; cursor: pointer; font-size: 15px; line-height: 1; display: flex; align-items: center; justify-content: center; flex-shrink: 0; transition: background 0.15s ease, transform 0.15s ease; }\r\n  .panel-cerrar2:hover { background: #eaeaea; transform: rotate(-8deg); }\r\n\r\n  .panel-imagen2 { width: 100%; height: 150px; object-fit: cover; display: block; border-radius: 8px; margin-bottom: 10px; }\r\n\r\n  .panel-cuerpo2 { padding: 16px 16px 6px; overflow-y: auto; flex: 1; min-height: 0; }\r\n  .panel-cuerpo2 h3 { margin: 0 0 6px; font-size: 16px; color: #222; }\r\n  .panel-cuerpo2 p { margin: 0; font-size: 13px; color: #666; line-height: 1.5; }\r\n  .panel-aceptar2 { display: block; width: calc(100% - 32px); margin: 14px auto 16px; background: #3c6e64; color: #fff; border: none; padding: 11px 0; border-radius: 6px; font-weight: 600; font-size: 14px; cursor: pointer; transition: background 0.15s ease, transform 0.1s ease; flex-shrink: 0; }\r\n  .panel-aceptar2:hover { background: #2c544c; }\r\n  .panel-aceptar2:active { transform: scale(0.97); }\r\n  @media (max-width: 480px) { .panel-lateral2 { width: 88vw; } }\r\n\r\n  \/* ---- Pin \"Usted est\u00e1 aqu\u00ed\" ---- *\/\r\n  .usted-aqui2 {\r\n    position: absolute; transform: translate(-50%, -100%); z-index: 6;\r\n    display: flex; flex-direction: column; align-items: center; pointer-events: none;\r\n    animation: aparecerPin2 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards;\r\n  }\r\n  @keyframes aparecerPin2 {\r\n    from { opacity: 0; transform: translate(-50%, -100%) scale(0.5); }\r\n    to   { opacity: 1; transform: translate(-50%, -100%) scale(1); }\r\n  }\r\n  .usted-aqui2-etiqueta { background: #16a37e; color: #fff; font-size: 11px; font-weight: 700; padding: 5px 12px; border-radius: 7px; white-space: nowrap; margin-bottom: 6px; box-shadow: 0 3px 8px rgba(0,0,0,0.3); position: relative; }\r\n  .usted-aqui2-etiqueta::after { content: \"\"; position: absolute; bottom: -5px; left: 50%; transform: translateX(-50%); border-width: 5px 5px 0 5px; border-style: solid; border-color: #16a37e transparent transparent transparent; }\r\n  .usted-aqui2-pin { width: 18px; height: 18px; border-radius: 50%; position: relative; background: radial-gradient(circle at 35% 30%, #7fe3c9, #16a37e 60%, #0d7a5f); border: 3px solid #fff; box-shadow: 0 0 0 4px rgba(22,163,126,0.3), 0 2px 6px rgba(0,0,0,0.3); }\r\n  .usted-aqui2-pin::before { content: \"\"; position: absolute; inset: -8px; border-radius: 50%; background: rgba(22,163,126,0.35); animation: pulso2 1.8s infinite; }\r\n  @keyframes pulso2 { 0% { transform: scale(0.6); opacity: 0.8; } 100% { transform: scale(2.4); opacity: 0; } }\r\n\r\n  \/* ---- Popup de estacionamiento ---- *\/\r\n  .fondo-oscuro-parking2 { display: none; position: fixed; inset: 0; background: rgba(20,25,25,0.45); z-index: 10000; }\r\n  .fondo-oscuro-parking2.activo2 { display: block; animation: fundido2 0.2s ease; }\r\n  .popup-parking2 {\r\n    visibility: hidden; opacity: 0; position: fixed; top: 50%; left: 50%;\r\n    transform: translate(-50%, -45%); background: #fff; z-index: 10001;\r\n    width: 300px; max-width: 85vw; border-radius: 16px; padding: 28px 22px 22px;\r\n    text-align: center; box-shadow: 0 12px 40px rgba(0,0,0,0.35);\r\n    transition: opacity 0.2s cubic-bezier(0.16, 1, 0.3, 1), transform 0.2s cubic-bezier(0.16, 1, 0.3, 1), visibility 0.2s;\r\n  }\r\n  .popup-parking2.activo2 { visibility: visible; opacity: 1; transform: translate(-50%, -50%); }\r\n  .popup-parking2-icono { font-size: 34px; margin-bottom: 8px; }\r\n  .popup-parking2 h3 { margin: 0 0 8px; font-size: 16px; color: #222; }\r\n  .popup-parking2 p { margin: 0 0 18px; font-size: 13px; color: #666; line-height: 1.5; }\r\n  .popup-parking2-cerrar { background: #3c6e64; color: #fff; border: none; padding: 10px 22px; border-radius: 20px; font-weight: 600; font-size: 13px; cursor: pointer; transition: background 0.15s ease, transform 0.1s ease; }\r\n  .popup-parking2-cerrar:hover { background: #2c544c; }\r\n  .popup-parking2-cerrar:active { transform: scale(0.96); }\r\n\r\n  \/* Respeta a quienes prefieren menos movimiento *\/\r\n  @media (prefers-reduced-motion: reduce) {\r\n    .contenedor-mapa2, .icono-flotante2, .punto-mapa2, .usted-aqui2,\r\n    .fondo-oscuro2, .fondo-oscuro-parking2, .popup-parking2 {\r\n      animation: none !important;\r\n      opacity: 1 !important;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\nwindow.QuantumMapa = window.QuantumMapa || { puntoPartida: null, puntoDestino: null, pintarUstedAqui: null };\r\n\r\n(function () {\r\n  \/\/ ---- Coordenadas de cada punto en el mapa (porcentaje top\/left) ----\r\n  var POSICIONES = {\r\n    \"1\": { top: 19.6, left: 2.6,  generic: false },\r\n    A:   { top: 33.0, left: 11.3, generic: false },\r\n    B:   { top: 32.6, left: 17.6, generic: false },\r\n    C:   { top: 28.8, left: 25.1, generic: false },\r\n    D:   { top: 55.0, left: 18.3, generic: false },\r\n    E:   { top: 62.7, left: 23.6, generic: false },\r\n    F:   { top: 45.0, left: 26.2, generic: false },\r\n    G:   { top: 44.7, left: 34.9, generic: false },\r\n    H:   { top: 45.6, left: 42.9, generic: false },\r\n    I:   { top: 34.7, left: 48.0, generic: false },\r\n    J:   { top: 55.6, left: 73.1, generic: false },\r\n    K:   { top: 54.4, left: 90.9, generic: false },\r\n    M:   { top: 35.5, left: 40.2, generic: false },\r\n    N:   { top: 70.7, left: 26.2, generic: false },\r\n    O:   { top: 81.0, left: 18.3, generic: false },\r\n    L1:  { top: 24.2, left: 19.5, generic: true },\r\n    L2:  { top: 29.3, left: 28.4, generic: true },\r\n    L3:  { top: 31.0, left: 32.3, generic: true },\r\n    L4:  { top: 45.7, left: 49.7, generic: true },\r\n    L5:  { top: 51.4, left: 11.3, generic: true },\r\n    L6:  { top: 56.5, left: 31.2, generic: true },\r\n    L7:  { top: 66.1, left: 35.1, generic: true },\r\n    L8:  { top: 53.1, left: 68.1, generic: true },\r\n    L9:  { top: 52.6, left: 96.2, generic: true },\r\n    L10: { top: 23.5, left: 22.3, generic: true },\r\n    L11: { top: 48.5, left: 30.0, generic: true },\r\n    L12: { top: 28.6, left: 50.5, generic: true }\r\n  };\r\n\r\n  \/\/ ---- Informaci\u00f3n de cada edificio \/ punto ----\r\n  var EDIFICIOS = {\r\n    \"1\": { nombre: \"Entrada a Quantum\", descripcion: \"Entrada principal\", imagen: \"\" },\r\n    A:   { nombre: \"IMSS\", nombreCompleto: \"CENTRO DE INVESTIGACI\u00d3N EN BIOMEDICINA MOLECULAR (IMSS)\", descripcion: \"Centro de alta tecnolog\u00eda especializado en biolog\u00eda molecular, dedicado a la investigaci\u00f3n, patentamiento y diagn\u00f3stico de enfermedades respiratorias infecciosas.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/9193e0ae-f91f-4ee1-9ba5-e611fcdc7ce8.png\" },\r\n    B:   { nombre: \"Cl\u00faster Minero\", descripcion: \"Informaci\u00f3n resumida del edificio\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/12538b64-94e7-48f3-96f1-6fc742376c91.jpg\" },\r\n    C:   { nombre: \"PHOTON\", nombreCompleto: \"PHOTON INNOVATION HUB\", descripcion: \"Ecosistema de innovaci\u00f3n y emprendimiento tecnol\u00f3gico de diez niveles, dise\u00f1ado para vincular a la academia, el sector productivo y organismos estrat\u00e9gicos en el desarrollo de proyectos tecnol\u00f3gicos aplicados.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/2e9b76b4-c2aa-4cb2-87eb-7eb48a8800c4.png\" },\r\n    D:   { nombre: \"FID\", nombreCompleto: \"FRISCO INVESTIGACION Y DESARROLLO (FID)\", descripcion: \"Centro especializado en geolog\u00eda, minado y an\u00e1lisis metal\u00fargico orientado a elevar la eficiencia y rentabilidad minera.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/e30b42df-bf4c-4a39-bfd3-650ebc29e857-1.png\" },\r\n    E:   { nombre: \"AEM\", nombreCompleto: \"CENTRO DE DESARROLLO ESPACIAL DEL ESTADO DE ZACATECAS (AEM)\", descripcion: \"Centro de I+D en telecomunicaciones y electr\u00f3nica espacial, especializado en rob\u00f3tica, IoT y radiofrecuencia para el desarrollo de soluciones tecnol\u00f3gicas de impacto p\u00fablico y productivo.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/b5491a37-bb70-4e1a-9bd0-78dae88a8b41-1.png\" },\r\n    F:   { nombre: \"CIMAT\", nombreCompleto: \"CENTRO DE INVESTIGACI\u00d3N EN MATEM\u00c1TICAS (CIMAT ZACATECAS)\", descripcion: \"Centro p\u00fablico de investigaci\u00f3n e innovaci\u00f3n en software, rob\u00f3tica e inteligencia artificial, enfocado en la formaci\u00f3n de posgrado y el desarrollo de proyectos de impacto regional.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/a1373fd5-2d26-45dc-ad26-7232edf13e5a-1-scaled.jpg\" },\r\n    G:   { nombre: \"LASEC\", nombreCompleto: \"LASEC TECHNOLOGY SISTEMS\", descripcion: \"Centro p\u00fablico de investigaci\u00f3n e innovaci\u00f3n en software, rob\u00f3tica e inteligencia artificial, enfocado en la formaci\u00f3n de posgrado y el desarrollo de proyectos de impacto regional.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/4b3f59d7-b7cb-4eb5-99ac-0c4e42f13362.jpg\" },\r\n    H:   { nombre: \"COMPULOGIC\", nombreCompleto: \"Centro de Investigaci\u00f3n y Desarrollo de Soluciones de Tecnolog\u00edas de la Informaci\u00f3n, Comunicaciones e Ingenier\u00eda de Software del Estado de zacatecas.\", descripcion: \"Centro de innovaci\u00f3n en TIC e ingenier\u00eda de software, enfocado en IA, rob\u00f3tica y biotecnolog\u00eda para desarrollar soluciones en agroindustria, ciudades inteligentes, seguridad y automatizaci\u00f3n.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/4778ffba-e370-4cad-812a-038d2072ec7e.png\" },\r\n    I:   { nombre: \"SOLARIC\", descripcion: \"Informaci\u00f3n resumida del edificio\", imagen: \"\" },\r\n    J:   { nombre: \"LAB UAZ\", nombreCompleto: \"LABORATORIOS DE LA UAZ\", descripcion: \"Sede universitaria de docencia e investigaci\u00f3n avanzada, especializada en manufactura, sistemas h\u00eddricos y ciencia y tecnolog\u00eda de la luz y la materia\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/b6b50260-6779-44a8-8f08-1b11a3b90e56.png\" },\r\n    K:   { nombre: \"TERRA CORP\", nombreCompleto: \"TERRA CORPORACI\u00d3N Centro de Capacitaci\u00f3n en Voladuras y Explosivos\", descripcion: \"Centro especializado en log\u00edstica, capacitaci\u00f3n y certificaci\u00f3n en explosivos y voladuras mineras, enfocado en impulsar la seguridad y la profesionalizaci\u00f3n del sector.\", imagen: \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/01\/d863318f-46c7-4825-aa58-dc48e6cd83f8.png\" },\r\n    M:   { nombre: \"CAPACITACION CLUS MIN\", descripcion: \"Informaci\u00f3n resumida del edificio\", imagen: \"\" },\r\n    N:   { nombre: \"AREA DE JUEGOS\", descripcion: \"Informaci\u00f3n resumida del edificio\", imagen: \"\" },\r\n    O:   { nombre: \"Ecoparque\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    L1:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L2:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L3:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L4:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L5:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L6:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L7:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L8:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L9:  { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L10: { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L11: { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" },\r\n    L12: { nombre: \"ESTACIONAMIENTO\", descripcion: \"Editar descripci\u00f3n\", imagen: \"\" }\r\n  };\r\n\r\n  var ESPECIALES = [\"1\", \"N\", \"O\", \"M\"];\r\n  var container = document.getElementById(\"contenedor-mapa2\");\r\n\r\n  \/\/ ---- Creaci\u00f3n de los botones (puntos) sobre el mapa ----\r\n  function crearBotones() {\r\n    var indice = 0;\r\n    Object.keys(POSICIONES).forEach(function (id) {\r\n      var pos = POSICIONES[id];\r\n      var btn = document.createElement(\"button\");\r\n      var cls = \"punto-mapa2\";\r\n      if (pos.generic) cls += \" punto-generico2\";\r\n      else if (ESPECIALES.indexOf(id) !== -1) cls += \" punto-especial2\";\r\n      btn.className = cls;\r\n      btn.style.top = pos.top + \"%\";\r\n      btn.style.left = pos.left + \"%\";\r\n      btn.style.setProperty(\"--retraso\", (0.15 + indice * 0.025) + \"s\");\r\n      btn.dataset.id = id;\r\n      btn.textContent = id.replace(\/[0-9]\/g, \"\") || id;\r\n      container.appendChild(btn);\r\n      indice++;\r\n\r\n      btn.addEventListener(\"click\", function () {\r\n        if (pos.generic) { abrirPopupParking(); return; }\r\n        abrirPanel(id);\r\n      });\r\n    });\r\n  }\r\n  crearBotones();\r\n\r\n  \/\/ ---- Panel lateral de informaci\u00f3n de edificio ----\r\n  var overlay = document.getElementById(\"fondo-oscuro2\");\r\n  var panel = document.getElementById(\"panel-lateral2\");\r\n  var closeBtn = document.getElementById(\"panel-cerrar2\");\r\n  var acceptBtn = document.getElementById(\"panel-aceptar2\");\r\n\r\n  function abrirPanel(id) {\r\n    var data = EDIFICIOS[id];\r\n    if (!data) return;\r\n    var letra = id.replace(\/[0-9]\/g, \"\") || id;\r\n    document.getElementById(\"panel-letra2\").textContent = letra;\r\n    document.getElementById(\"panel-titulo2\").textContent = data.nombre;\r\n    document.getElementById(\"panel-nombre2\").textContent = data.nombre;\r\n    document.getElementById(\"panel-descripcion2\").textContent = data.descripcion;\r\n    document.getElementById(\"panel-imagen2\").src = data.imagen;\r\n    document.getElementById(\"panel-imagen2\").style.display = data.imagen ? \"block\" : \"none\";\r\n    panel.dataset.currentId = id;\r\n    overlay.classList.add(\"activo2\");\r\n    panel.classList.add(\"activo2\");\r\n  }\r\n\r\n  function cerrarPanel() {\r\n    overlay.classList.remove(\"activo2\");\r\n    panel.classList.remove(\"activo2\");\r\n  }\r\n\r\n  overlay.addEventListener(\"click\", cerrarPanel);\r\n  closeBtn.addEventListener(\"click\", cerrarPanel);\r\n\r\n  \/\/ ---- Popup de estacionamiento ----\r\n  var overlayParking = document.getElementById(\"fondo-oscuro-parking2\");\r\n  var popupParking = document.getElementById(\"popup-parking2\");\r\n  var popupParkingCerrar = document.getElementById(\"popup-parking2-cerrar\");\r\n\r\n  function abrirPopupParking() {\r\n    overlayParking.classList.add(\"activo2\");\r\n    popupParking.classList.add(\"activo2\");\r\n  }\r\n  function cerrarPopupParking() {\r\n    overlayParking.classList.remove(\"activo2\");\r\n    popupParking.classList.remove(\"activo2\");\r\n  }\r\n  overlayParking.addEventListener(\"click\", cerrarPopupParking);\r\n  popupParkingCerrar.addEventListener(\"click\", cerrarPopupParking);\r\n\r\n  \/\/ ---- Bot\u00f3n \"Aceptar\": guarda el destino y avanza a la secci\u00f3n de rutas ----\r\n  acceptBtn.addEventListener(\"click\", function () {\r\n    var id = panel.dataset.currentId;\r\n    cerrarPanel();\r\n\r\n    if (id === \"O\") {\r\n      var ecoDest = document.getElementById(\"ecoparque-destino\");\r\n      var mapaDest = document.getElementById(\"mapa-destino\");\r\n      if (mapaDest) mapaDest.style.display = \"none\";\r\n      if (ecoDest) ecoDest.style.display = \"block\";\r\n      return;\r\n    }\r\n\r\n    window.QuantumMapa.puntoDestino = id;\r\n    document.dispatchEvent(new CustomEvent(\"puntoDestinoSeleccionado\", { detail: { id: id } }));\r\n\r\n    var secDestino = document.getElementById(\"seccion-destino\");\r\n    var secRutas = document.getElementById(\"seccion-rutas\");\r\n    if (secDestino) secDestino.style.setProperty(\"display\", \"none\", \"important\");\r\n    if (secRutas) secRutas.style.setProperty(\"display\", \"block\", \"important\");\r\n  });\r\n\r\n  \/\/ ---- Bot\u00f3n \"Cambiar punto de partida\": resetea todo y vuelve al mapa inicial ----\r\n  document.getElementById(\"btn-cambiar-partida2\").addEventListener(\"click\", function () {\r\n    var secPartida = document.getElementById(\"seccion-partida\");\r\n    var secDestino = document.getElementById(\"seccion-destino\");\r\n    var secRutas = document.getElementById(\"seccion-rutas\");\r\n    if (secDestino) secDestino.style.setProperty(\"display\", \"none\", \"important\");\r\n    if (secRutas) secRutas.style.setProperty(\"display\", \"none\", \"important\");\r\n    if (secPartida) secPartida.style.setProperty(\"display\", \"block\", \"important\");\r\n\r\n    var m = document.getElementById(\"mapa\");\r\n    var e = document.getElementById(\"ecoparque\");\r\n    var md = document.getElementById(\"mapa-destino\");\r\n    var ed = document.getElementById(\"ecoparque-destino\");\r\n    if (m) m.style.display = \"block\";\r\n    if (e) e.style.display = \"none\";\r\n    if (md) md.style.display = \"block\";\r\n    if (ed) ed.style.display = \"none\";\r\n\r\n    var marcador2 = document.getElementById(\"usted-aqui-marcador2\");\r\n    if (marcador2) marcador2.remove();\r\n    var marcadorRt = document.getElementById(\"usted-aqui-marcadorRt\");\r\n    if (marcadorRt) marcadorRt.remove();\r\n\r\n    window.QuantumMapa.puntoPartida = null; \r\n    window.QuantumMapa.puntoDestino = null; \r\n  });\r\n\r\n  \/\/ ---- Pin \"Usted est\u00e1 aqu\u00ed\" sobre el mapa de destino ----\r\n  window.QuantumMapa.pintarUstedAquiMapa2 = function (idForzado) {\r\n    var id = idForzado || window.QuantumMapa.puntoPartida;\r\n    var pos = POSICIONES[id];\r\n    if (!pos) return;\r\n    var previo = document.getElementById(\"usted-aqui-marcador2\");\r\n    if (previo) previo.remove();\r\n    var marcador = document.createElement(\"div\");\r\n    marcador.id = \"usted-aqui-marcador2\";\r\n    marcador.className = \"usted-aqui2\";\r\n    marcador.style.top = pos.top + \"%\";\r\n    marcador.style.left = pos.left + \"%\";\r\n    marcador.innerHTML =\r\n      '<span class=\"usted-aqui2-etiqueta\">Usted est\u00e1 aqu\u00ed<\/span>' +\r\n      '<span class=\"usted-aqui2-pin\"><\/span>';\r\n    container.appendChild(marcador);\r\n  };\r\n\r\n  \/\/ Si al cargar ya existe un punto de partida (por ejemplo al volver de rutas), lo dibuja\r\n  if (window.QuantumMapa.puntoPartida) {\r\n    window.QuantumMapa.pintarUstedAquiMapa2(window.QuantumMapa.puntoPartida);\r\n  }\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4013a2a e-con-full e-flex e-con e-child\" data-id=\"4013a2a\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-56529a8 elementor-widget elementor-widget-image\" data-id=\"56529a8\" data-element_type=\"widget\" data-settings=\"{&quot;_animation_tablet&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"275\" src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-1024x275.png\" class=\"attachment-large size-large wp-image-1251\" alt=\"\" srcset=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-1024x275.png 1024w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-300x81.png 300w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-768x206.png 768w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-1536x413.png 1536w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-18x5.png 18w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-1000x269.png 1000w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-230x62.png 230w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-350x94.png 350w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-480x129.png 480w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-500x134.png 500w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-800x215.png 800w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-1280x344.png 1280w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres-1920x516.png 1920w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/mapanombres.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1c888f4 e-con-full e-flex e-con e-child\" data-id=\"1c888f4\" data-element_type=\"container\" id=\"ecoparque-destino\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5d3bbb0 elementor-widget elementor-widget-html\" data-id=\"5d3bbb0\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"contenedor-principal-eco2\" id=\"contenedor-principal-eco2\">\r\n  <div class=\"barra-herramientas-eco2\">\r\n    <button id=\"btn-volver-mapa-eco2\" class=\"btn-volver-mapa-eco2\">Volver al mapa<\/button>\r\n  <\/div>\r\n\r\n  <div class=\"contenedor-mapa-eco2\" id=\"contenedor-mapa-eco2\">\r\n    <img decoding=\"async\"\r\n      class=\"imagen-mapa-eco2\"\r\n      id=\"imagen-mapa-eco2\"\r\n      src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/fondo_ecoparque.png\"\r\n    \/>\r\n  <\/div>\r\n\r\n  <div class=\"fondo-oscuro-eco2\" id=\"fondo-oscuro-eco2\"><\/div>\r\n\r\n  <aside class=\"panel-lateral-eco2\" id=\"panel-lateral-eco2\">\r\n    <div class=\"panel-cabecera-eco2\">\r\n      <span class=\"panel-letra-eco2\" id=\"panel-letra-eco2\">A<\/span>\r\n      <span class=\"panel-titulo-eco2\" id=\"panel-titulo-eco2\">EDIFICIO<\/span>\r\n      <button class=\"panel-cerrar-eco2\" id=\"panel-cerrar-eco2\" aria-label=\"Cerrar\">&#8617;<\/button>\r\n    <\/div>\r\n    <img decoding=\"async\" class=\"panel-imagen-eco2\" id=\"panel-imagen-eco2\" src=\"\" alt=\"\" \/>\r\n    <div class=\"panel-cuerpo-eco2\">\r\n      <h3 id=\"panel-nombre-eco2\">EDIFICIO<\/h3>\r\n      <p id=\"panel-descripcion-eco2\">Informaci\u00f3n resumida del edificio<\/p>\r\n    <\/div>\r\n    <button class=\"panel-aceptar-eco2\" id=\"panel-aceptar-eco2\">Aceptar<\/button>\r\n  <\/aside>\r\n\r\n  <div class=\"fondo-oscuro-construccion-eco2\" id=\"fondo-oscuro-construccion-eco2\"><\/div>\r\n  <div class=\"popup-construccion-eco2\" id=\"popup-construccion-eco2\">\r\n    <div class=\"popup-construccion-eco2-icono\">\ud83d\udea7<\/div>\r\n    <h3>Zona en construcci\u00f3n<\/h3>\r\n    <p>Esta \u00e1rea del Ecoparque se encuentra actualmente en construcci\u00f3n. Pronto estar\u00e1 disponible.<\/p>\r\n    <button id=\"popup-construccion-eco2-cerrar\" class=\"popup-construccion-eco2-cerrar\">Entendido<\/button>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  .contenedor-principal-eco2 {\r\n    font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;\r\n    width: 100%;\r\n    max-width: 100%;\r\n    margin: 0 auto;\r\n    position: relative;\r\n  }\r\n\r\n  .barra-herramientas-eco2 { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }\r\n\r\n  .btn-volver-mapa-eco2 {\r\n    background: #3c6e64; color: #fff; border: none; padding: 8px 16px; border-radius: 20px;\r\n    font-weight: 600; font-size: 12.5px; cursor: pointer; margin-left: auto;\r\n  }\r\n  .btn-volver-mapa-eco2:hover { background: #2c544c; }\r\n\r\n  .contenedor-mapa-eco2 {\r\n    position: relative; width: 100%; border-radius: 10px;\r\n    overflow: hidden; box-shadow: 0 4px 18px rgba(0,0,0,0.15);\r\n  }\r\n  .imagen-mapa-eco2 { width: 100%; display: block; user-select: none; -webkit-user-drag: none; }\r\n\r\n  .punto-mapa-eco2 {\r\n    position: absolute;\r\n    width: 30px;\r\n    height: 30px;\r\n    border-radius: 50%;\r\n    background: linear-gradient(180deg, #48968C 0%, #2a5e60 100%);\r\n    border: 2px solid #fff;\r\n    color: #fff;\r\n    font-weight: bold;\r\n    font-size: 13px;\r\n    cursor: pointer;\r\n    transform: translate(-50%, -50%);\r\n    box-shadow: 0 2px 4px rgba(0,0,0,0.2);\r\n    transition: transform 0.2s ease, filter 0.2s ease;\r\n    display: flex; align-items: center; justify-content: center;\r\n    padding: 0; z-index: 5;\r\n  }\r\n\r\n  .punto-mapa-eco2.punto-generico-eco2 {\r\n    background: linear-gradient(180deg, #62828C 0%, #A4BDD1 100%);\r\n    font-size: 11px;\r\n  }\r\n\r\n  .punto-mapa-eco2.punto-especial-eco2 {\r\n    background: linear-gradient(180deg, #585F7C 0%, #618BA9 100%);\r\n  }\r\n\r\n  .punto-mapa-eco2:hover {\r\n    transform: translate(-50%, -50%) scale(1.15);\r\n    filter: brightness(1.2);\r\n  }\r\n\r\n  .fondo-oscuro-eco2 {\r\n    display: none; position: fixed; inset: 0;\r\n    background: rgba(20,25,25,0.35); z-index: 9998;\r\n  }\r\n  .fondo-oscuro-eco2.activo-eco2 { display: block; }\r\n\r\n  .panel-lateral-eco2 {\r\n    position: fixed; top: 0; right: 0; height: 100%; width: 300px; max-width: 85vw;\r\n    background: #fff; z-index: 9999; box-shadow: -8px 0 28px rgba(0,0,0,0.3);\r\n    border-radius: 16px 0 0 16px; overflow: hidden; display: flex; flex-direction: column;\r\n    transform: translateX(100%);\r\n    transition: transform 0.28s ease;\r\n  }\r\n  .panel-lateral-eco2.activo-eco2 { transform: translateX(0); }\r\n\r\n  .panel-cabecera-eco2 {\r\n    background: #3c6e64; color: #fff; display: flex; align-items: center;\r\n    padding: 14px 12px; gap: 10px; flex-shrink: 0;\r\n  }\r\n  .panel-letra-eco2 {\r\n    width: 30px; height: 30px; border-radius: 50%; background: #fff; color: #3c6e64;\r\n    display: flex; align-items: center; justify-content: center; font-weight: bold; font-size: 14px; flex-shrink: 0;\r\n  }\r\n  .panel-titulo-eco2 { flex: 1; font-weight: 700; letter-spacing: 0.5px; font-size: 15px; text-transform: uppercase; }\r\n  .panel-cerrar-eco2 {\r\n    background: #fff; border: none; color: #3c6e64; width: 30px; height: 30px; border-radius: 50%;\r\n    cursor: pointer; font-size: 15px; line-height: 1; display: flex; align-items: center; justify-content: center; flex-shrink: 0;\r\n  }\r\n  .panel-cerrar-eco2:hover { background: #eaeaea; }\r\n\r\n  .panel-imagen-eco2 { width: 100%; height: 150px; object-fit: cover; display: block; flex-shrink: 0; }\r\n  .panel-cuerpo-eco2 { padding: 16px 16px 6px; overflow-y: auto; flex: 1; }\r\n  .panel-cuerpo-eco2 h3 { margin: 0 0 6px; font-size: 16px; color: #222; }\r\n  .panel-cuerpo-eco2 p { margin: 0; font-size: 13px; color: #666; line-height: 1.5; }\r\n\r\n  .panel-aceptar-eco2 {\r\n    display: block; width: calc(100% - 32px); margin: 14px auto 16px; background: #3c6e64;\r\n    color: #fff; border: none; padding: 11px 0; border-radius: 6px; font-weight: 600;\r\n    font-size: 14px; cursor: pointer; transition: background 0.15s ease; flex-shrink: 0;\r\n  }\r\n  .panel-aceptar-eco2:hover { background: #2c544c; }\r\n\r\n  @media (max-width: 480px) { .panel-lateral-eco2 { width: 88vw; } }\r\n\r\n  .usted-aqui-eco2 { position: absolute; transform: translate(-50%, -100%); z-index: 6; display: flex; flex-direction: column; align-items: center; pointer-events: none; }\r\n  .usted-aqui-eco2-etiqueta { background: #16a37e; color: #fff; font-size: 11px; font-weight: 700; padding: 5px 12px; border-radius: 7px; white-space: nowrap; margin-bottom: 6px; box-shadow: 0 3px 8px rgba(0,0,0,0.3); position: relative; }\r\n  .usted-aqui-eco2-etiqueta::after { content: \"\"; position: absolute; bottom: -5px; left: 50%; transform: translateX(-50%); border-width: 5px 5px 0 5px; border-style: solid; border-color: #16a37e transparent transparent transparent; }\r\n  .usted-aqui-eco2-pin { width: 18px; height: 18px; border-radius: 50%; position: relative; background: radial-gradient(circle at 35% 30%, #7fe3c9, #16a37e 60%, #0d7a5f); border: 3px solid #fff; box-shadow: 0 0 0 4px rgba(22,163,126,0.3), 0 2px 6px rgba(0,0,0,0.3); }\r\n  .usted-aqui-eco2-pin::before { content: \"\"; position: absolute; inset: -8px; border-radius: 50%; background: rgba(22,163,126,0.35); animation: pulso-eco2 1.8s infinite; }\r\n  @keyframes pulso-eco2 { 0% { transform: scale(0.6); opacity: 0.8; } 100% { transform: scale(2.4); opacity: 0; } }\r\n\r\n  \/* --- Popup: \u00e1rea en construcci\u00f3n (mismo estilo que el popup de estacionamiento) --- *\/\r\n  .fondo-oscuro-construccion-eco2 { display: none; position: fixed; inset: 0; background: rgba(20,25,25,0.45); z-index: 10000; }\r\n  .fondo-oscuro-construccion-eco2.activo-eco2 { display: block; }\r\n  .popup-construccion-eco2 {\r\n    visibility: hidden; opacity: 0; position: fixed; top: 50%; left: 50%;\r\n    transform: translate(-50%, -45%); background: #fff; z-index: 10001;\r\n    width: 300px; max-width: 85vw; border-radius: 16px; padding: 28px 22px 22px;\r\n    text-align: center; box-shadow: 0 12px 40px rgba(0,0,0,0.35);\r\n    transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s;\r\n  }\r\n  .popup-construccion-eco2.activo-eco2 { visibility: visible; opacity: 1; transform: translate(-50%, -50%); }\r\n  .popup-construccion-eco2-icono { font-size: 34px; margin-bottom: 8px; }\r\n  .popup-construccion-eco2 h3 { margin: 0 0 8px; font-size: 16px; color: #222; }\r\n  .popup-construccion-eco2 p { margin: 0 0 18px; font-size: 13px; color: #666; line-height: 1.5; }\r\n  .popup-construccion-eco2-cerrar { background: #3c6e64; color: #fff; border: none; padding: 10px 22px; border-radius: 20px; font-weight: 600; font-size: 13px; cursor: pointer; transition: background 0.15s ease; }\r\n  .popup-construccion-eco2-cerrar:hover { background: #2c544c; }\r\n<\/style>\r\n\r\n<script>\r\nwindow.QuantumMapa = window.QuantumMapa || {};\r\n\r\n(function () {\r\n  var POSICIONES = {\r\n    A:   { top: 29.4, left: 78.6, generic: false },\r\n    B:   { top: 51.9, left: 39.8, generic: false },\r\n    C:   { top: 58.3, left: 54.5, generic: false },\r\n    D:   { top: 77.3, left: 34.5, generic: false },\r\n    E:   { top: 67.5, left: 47.5, generic: false },\r\n    F:   { top: 44.8, left: 16.9, generic: false },\r\n    G:   { top: 88.5, left: 24.4, generic: false },\r\n    H:   { top: 33.9, left: 17.3, generic: false },\r\n    I:   { top: 41.3, left: 9.0,  generic: false },\r\n    J:   { top: 88.9, left: 48.0, generic: false },\r\n    K:   { top: 61.3, left: 86.8, generic: false },\r\n    M:   { top: 70.1, left: 96.1, generic: false },\r\n    L1:  { top: 53.7, left: 8.1,  generic: true },\r\n    L2:  { top: 59.1, left: 18.3, generic: true },\r\n    L3:  { top: 77.1, left: 15.2, generic: true },\r\n    L4:  { top: 62.1, left: 29.4, generic: true },\r\n    L5:  { top: 69.2, left: 66.4, generic: true }\r\n  };\r\n\r\n  var EDIFICIOS = {\r\n    A: { nombre: \"Estacionamiento\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    B: { nombre: \"Plaza de acceso\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    C: { nombre: \"Caseta de vigilancia\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    D: { nombre: \"Servicios sanitarios\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    E: { nombre: \"Aula ambiental\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    F: { nombre: \"Modulo de venta\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    G: { nombre: \"Herbario\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    H: { nombre: \"Vivero\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    I: { nombre: \"Almac\u00e9n de semillas\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    J: { nombre: \"Modulo de interpretaci\u00f3n de fauna\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    K: { nombre: \"Area de talleres al exterior\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    M: { nombre: \"Patio de maniobras\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    L1: { nombre: \"Nichos de estudio\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    L2: { nombre: \"Nichos de estudio\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    L3: { nombre: \"Nichos de estudio\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    L4: { nombre: \"Nichos de estudio\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" },\r\n    L5: { nombre: \"Nichos de estudio\", descripcion: \"Informaci\u00f3n resumida de la zona\", imagen: \"\" }\r\n  };\r\n\r\n  var ESPECIALES = [\"C\"];\r\n\r\n  var container = document.getElementById(\"contenedor-mapa-eco2\");\r\n\r\n  function crearBotones() {\r\n    Object.keys(POSICIONES).forEach(function (id) {\r\n      var pos = POSICIONES[id];\r\n      var btn = document.createElement(\"button\");\r\n\r\n      var cls = \"punto-mapa-eco2\";\r\n      if (pos.generic) {\r\n        cls += \" punto-generico-eco2\";\r\n      } else if (ESPECIALES.indexOf(id) !== -1) {\r\n        cls += \" punto-especial-eco2\";\r\n      }\r\n      btn.className = cls;\r\n      btn.style.top = pos.top + \"%\";\r\n      btn.style.left = pos.left + \"%\";\r\n      btn.dataset.id = id;\r\n\r\n      btn.textContent = id.replace(\/[0-9]\/g, \"\") || id;\r\n      container.appendChild(btn);\r\n\r\n      btn.addEventListener(\"click\", function (e) {\r\n        \/\/ Todos los puntos del Ecoparque est\u00e1n en construcci\u00f3n por ahora\r\n        abrirPopupConstruccion();\r\n      });\r\n    });\r\n  }\r\n  crearBotones();\r\n\r\n  var overlay = document.getElementById(\"fondo-oscuro-eco2\");\r\n  var panel = document.getElementById(\"panel-lateral-eco2\");\r\n  var closeBtn = document.getElementById(\"panel-cerrar-eco2\");\r\n  var acceptBtn = document.getElementById(\"panel-aceptar-eco2\");\r\n\r\n  function abrirPanel(id) {\r\n    var data = EDIFICIOS[id];\r\n    if (!data) return;\r\n    var letra = id.replace(\/[0-9]\/g, \"\") || id;\r\n\r\n    document.getElementById(\"panel-letra-eco2\").textContent = letra;\r\n    document.getElementById(\"panel-titulo-eco2\").textContent = data.nombre;\r\n    document.getElementById(\"panel-nombre-eco2\").textContent = data.nombre;\r\n    document.getElementById(\"panel-descripcion-eco2\").textContent = data.descripcion;\r\n    document.getElementById(\"panel-imagen-eco2\").src = data.imagen;\r\n    document.getElementById(\"panel-imagen-eco2\").style.display = data.imagen ? \"block\" : \"none\";\r\n\r\n    panel.dataset.currentId = id;\r\n    overlay.classList.add(\"activo-eco2\");\r\n    panel.classList.add(\"activo-eco2\");\r\n  }\r\n\r\n  function cerrarPanel() {\r\n    overlay.classList.remove(\"activo-eco2\");\r\n    panel.classList.remove(\"activo-eco2\");\r\n  }\r\n\r\n  overlay.addEventListener(\"click\", cerrarPanel);\r\n  closeBtn.addEventListener(\"click\", cerrarPanel);\r\n\r\n  acceptBtn.addEventListener(\"click\", function () {\r\n    var id = panel.dataset.currentId;\r\n    cerrarPanel();\r\n  });\r\n\r\n  \/\/ --- Popup: \u00e1rea en construcci\u00f3n ---\r\n  var overlayConstruccion = document.getElementById(\"fondo-oscuro-construccion-eco2\");\r\n  var popupConstruccion = document.getElementById(\"popup-construccion-eco2\");\r\n  var popupConstruccionCerrar = document.getElementById(\"popup-construccion-eco2-cerrar\");\r\n\r\n  function abrirPopupConstruccion() {\r\n    overlayConstruccion.classList.add(\"activo-eco2\");\r\n    popupConstruccion.classList.add(\"activo-eco2\");\r\n  }\r\n  function cerrarPopupConstruccion() {\r\n    overlayConstruccion.classList.remove(\"activo-eco2\");\r\n    popupConstruccion.classList.remove(\"activo-eco2\");\r\n  }\r\n  overlayConstruccion.addEventListener(\"click\", cerrarPopupConstruccion);\r\n  popupConstruccionCerrar.addEventListener(\"click\", cerrarPopupConstruccion);\r\n\r\n  window.QuantumMapa.pintarUstedAquiEcoparque = function () {\r\n    var id = window.QuantumMapa.puntoPartida;\r\n    var pos = POSICIONES[id];\r\n    if (!pos) return;\r\n\r\n    var previo = document.getElementById(\"usted-aqui-marcador-eco2\");\r\n    if (previo) previo.remove();\r\n\r\n    var marcador = document.createElement(\"div\");\r\n    marcador.id = \"usted-aqui-marcador-eco2\";\r\n    marcador.className = \"usted-aqui-eco2\";\r\n    marcador.style.top = pos.top + \"%\";\r\n    marcador.style.left = pos.left + \"%\";\r\n    marcador.innerHTML =\r\n      '<span class=\"usted-aqui-eco2-etiqueta\">Usted est\u00e1 aqu\u00ed<\/span>' +\r\n      '<span class=\"usted-aqui-eco2-pin\"><\/span>';\r\n    container.appendChild(marcador);\r\n  };\r\n\r\n  document.getElementById(\"btn-volver-mapa-eco2\").addEventListener(\"click\", function () {\r\n    document.getElementById(\"ecoparque-destino\").style.display = \"none\";\r\n    document.getElementById(\"mapa-destino\").style.display = \"block\";\r\n\r\n    var marcadorEco = document.getElementById(\"usted-aqui-marcador-eco2\");\r\n    if (marcadorEco) marcadorEco.remove();\r\n\r\n    \/\/ FIX: era \"pintarUstedAquiMapa\" (sin el 2), esa funci\u00f3n no existe.\r\n    \/\/ La correcta es \"pintarUstedAquiMapa2\", definida en el Doc 3.\r\n    if (typeof window.QuantumMapa.pintarUstedAquiMapa2 === \"function\") {\r\n      window.QuantumMapa.pintarUstedAquiMapa2(\"O\");\r\n    }\r\n  });\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0d7f3ca e-con-full e-flex e-con e-child\" data-id=\"0d7f3ca\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f736bee elementor-widget elementor-widget-image\" data-id=\"f736bee\" data-element_type=\"widget\" data-settings=\"{&quot;_animation_tablet&quot;:&quot;fadeIn&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"275\" src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-1024x275.jpg\" class=\"attachment-large size-large wp-image-1210\" alt=\"\" srcset=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-1024x275.jpg 1024w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-300x81.jpg 300w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-768x206.jpg 768w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-1536x413.jpg 1536w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-18x5.jpg 18w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-1000x269.jpg 1000w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-230x62.jpg 230w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-350x94.jpg 350w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-480x129.jpg 480w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-500x134.jpg 500w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-800x215.jpg 800w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-1280x344.jpg 1280w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque-1920x516.jpg 1920w, https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/nombres-quantum-ecoparque.jpg 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d1b17d1 e-flex e-con-boxed e-con e-parent\" data-id=\"d1b17d1\" data-element_type=\"container\" id=\"seccion-rutas\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-5ffab60 e-con-full e-flex e-con e-child\" data-id=\"5ffab60\" data-element_type=\"container\" id=\"mapa2d\">\n\t\t<div class=\"elementor-element elementor-element-3119202 e-con-full e-flex e-con e-child\" data-id=\"3119202\" data-element_type=\"container\" id=\"peatonal\">\n\t\t\t\t<div class=\"elementor-element elementor-element-151148d elementor-widget elementor-widget-html\" data-id=\"151148d\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"contenedor-principalRt\" id=\"contenedor-principalRt\">\r\n  <div class=\"barra-herramientasRt\">\r\n    <button id=\"btn-cambiar-partidaRt\" class=\"btn-cambiar-partidaRt\">Elegir otro destino<\/button>\r\n  <\/div>\r\n\r\n  <div class=\"contenedor-mapaRt\" id=\"contenedor-mapaRt\">\r\n    <img decoding=\"async\"\r\n      class=\"imagen-mapaRt\"\r\n      id=\"imagen-mapaRt\"\r\n      src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/fondo_quantum-scaled.png\"\r\n      alt=\"Mapa Quantum Ciudad del Conocimiento\"\r\n    \/>\r\n    <svg class=\"svg-rutasRt\" id=\"svg-rutasRt\" viewbox=\"0 0 100 100\" preserveaspectratio=\"none\"><\/svg>\r\n\r\n    <!-- ICONO FLOTANTE SOBRE EL PUNTO 1 -->\r\n    <img decoding=\"async\"\r\n      class=\"icono-flotanteRt\"\r\n      id=\"icono-flotanteRt\"\r\n      src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/entrada_quantum.png\"\r\n      alt=\"Entrada\"\r\n    \/>\r\n\r\n    <!-- INICIO DE BOTONES UI (MOCKUP) -->\r\n    <div class=\"ui-flotante-izq\" style=\"top: 40%;\">\r\n      <button class=\"btn-mockup\" id=\"btn-peatonal-1\" style=\"background: #3c6e64;\">\r\n        <img decoding=\"async\" src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/peaton_act.png\" alt=\"Peatonal\" \/>\r\n      <\/button>\r\n      <button class=\"btn-mockup\" id=\"btn-vehicular-1\" style=\"background: #a4b4b8;\">\r\n        <img decoding=\"async\" src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/carro_des.png\" alt=\"Vehicular\" \/>\r\n      <\/button>\r\n    <\/div>\r\n\r\n    <!-- FIN DE BOTONES UI -->\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  \/* CSS DE LOS BOTONES *\/\r\n  .ui-flotante-izq { position: absolute; left: 15px; display: flex; flex-direction: column; gap: 8px; z-index: 10; }\r\n  .ui-flotante-der { position: absolute; right: 15px; bottom: 15px; display: flex; align-items: flex-end; gap: 6px; z-index: 10; }\r\n  .btn-mockup { width: 45px; height: 45px; border: none; border-radius: 4px; padding: 5px; cursor: pointer; box-shadow: 0 4px 6px rgba(0,0,0,0.2); transition: transform 0.2s; }\r\n  .btn-mockup:hover { transform: scale(1.05); }\r\n  .btn-mockup img { width: 100%; height: 100%; object-fit: contain; }\r\n  .img-texto-vista { \r\n  height: 70px !important; \r\n  width: auto !important; \r\n  margin-right: 5px; \r\n  margin-bottom: 5px; \r\n}\r\n\r\n  \/* ESTILOS ORIGINALES *\/\r\n  .contenedor-principalRt {\r\n    font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;\r\n    width: 100%;\r\n    max-width: 100%;\r\n    margin: 0 auto;\r\n    position: relative;\r\n  }\r\n  .barra-herramientasRt { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; flex-wrap: wrap; }\r\n\r\n  .btn-cambiar-partidaRt {\r\n    background: #3c6e64; color: #fff; border: none; padding: 8px 16px; border-radius: 20px;\r\n    font-weight: 600; font-size: 12.5px; cursor: pointer; margin-left: auto;\r\n  }\r\n  .btn-cambiar-partidaRt:hover { background: #2c544c; }\r\n\r\n  \/* overflow visible para que el icono de entrada y el pin \"usted est\u00e1 aqu\u00ed\" puedan salir del contenedor *\/\r\n  .contenedor-mapaRt {\r\n    position: relative; width: 100%; border-radius: 10px; overflow: visible; box-shadow: 0 4px 18px rgba(0,0,0,0.15);\r\n    opacity: 0;\r\n    animation: aparecerMapaRt 0.7s cubic-bezier(0.16, 1, 0.3, 1) forwards;\r\n  }\r\n  @keyframes aparecerMapaRt {\r\n    from { opacity: 0; transform: scale(0.97); }\r\n    to   { opacity: 1; transform: scale(1); }\r\n  }\r\n\r\n  \/* el redondeado ahora vive en la imagen, ya que el contenedor ya no recorta *\/\r\n  .imagen-mapaRt { width: 100%; display: block; user-select: none; -webkit-user-drag: none; border-radius: 10px; }\r\n  .svg-rutasRt { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 4; }\r\n\r\n  \/* ---- Icono flotante sobre el punto 1 ---- *\/\r\n  .icono-flotanteRt {\r\n    position: absolute;\r\n    top: 19.6%;\r\n    left: 2.6%;\r\n    width: 9%;\r\n    max-width: 70px;\r\n    min-width: 30px;\r\n    transform: translate(-50%, calc(-100% - 14px));\r\n    pointer-events: none;\r\n    user-select: none;\r\n    -webkit-user-drag: none;\r\n    filter: drop-shadow(0 6px 10px rgba(0,0,0,0.28));\r\n    opacity: 0;\r\n    animation:\r\n      aparecerIconoRt 0.6s cubic-bezier(0.16, 1, 0.3, 1) 0.5s forwards,\r\n      flotarRt 3.2s ease-in-out 1.1s infinite;\r\n    z-index: 6;\r\n  }\r\n\r\n  @keyframes aparecerIconoRt {\r\n    from { opacity: 0; transform: translate(-50%, calc(-100% - 14px)) scale(0.6); }\r\n    to   { opacity: 1; transform: translate(-50%, calc(-100% - 14px)) scale(1); }\r\n  }\r\n\r\n  @keyframes flotarRt {\r\n    0%, 100% { transform: translate(-50%, calc(-100% - 14px)); }\r\n    50%      { transform: translate(-50%, calc(-100% - 22px)); }\r\n  }\r\n\r\n  .punto-mapaRt {\r\n    position: absolute; width: 26px; height: 26px; border-radius: 50%;\r\n    background: linear-gradient(180deg, #48968C 0%, #2a5e60 100%);\r\n    border: 2px solid; color: #fff; font-weight: bold; font-size: 13px; cursor: pointer;\r\n    transform: translate(-50%, -50%); box-shadow: 0 2px 4px rgba(0,0,0,0.2);\r\n    transition: transform 0.2s ease, filter 0.2s ease;\r\n    display: flex; align-items: center; justify-content: center;\r\n    padding: 0; z-index: 5;\r\n    opacity: 0;\r\n    animation: aparecerPuntoRt 0.45s cubic-bezier(0.16, 1, 0.3, 1) forwards;\r\n    animation-delay: var(--retraso, 0s);\r\n  }\r\n  .punto-mapaRt.punto-genericoRt { background: linear-gradient(180deg, #62828C 0%, #A4BDD1 100%); font-size: 11px; }\r\n  .punto-mapaRt.punto-especialRt { background: linear-gradient(180deg, #585F7C 0%, #618BA9 100%); }\r\n  .punto-mapaRt:hover { transform: translate(-50%, -50%) scale(1.15); filter: brightness(1.2); }\r\n\r\n  @keyframes aparecerPuntoRt {\r\n    from { opacity: 0; transform: translate(-50%, -50%) scale(0.3); }\r\n    to   { opacity: 1; transform: translate(-50%, -50%) scale(1); }\r\n  }\r\n\r\n  .usted-aquiRt {\r\n    position: absolute; transform: translate(-50%, -100%); z-index: 6; display: flex; flex-direction: column; align-items: center; pointer-events: none;\r\n    animation: aparecerPinRt 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards;\r\n  }\r\n  @keyframes aparecerPinRt {\r\n    from { opacity: 0; transform: translate(-50%, -100%) scale(0.5); }\r\n    to   { opacity: 1; transform: translate(-50%, -100%) scale(1); }\r\n  }\r\n  .usted-aquiRt-etiqueta { background: #16a37e; color: #fff; font-size: 11px; font-weight: 700; padding: 5px 12px; border-radius: 7px; white-space: nowrap; margin-bottom: 6px; box-shadow: 0 3px 8px rgba(0,0,0,0.3); position: relative; }\r\n  .usted-aquiRt-etiqueta::after { content: \"\"; position: absolute; bottom: -5px; left: 50%; transform: translateX(-50%); border-width: 5px 5px 0 5px; border-style: solid; border-color: #16a37e transparent transparent transparent; }\r\n  .usted-aquiRt-pin { width: 18px; height: 18px; border-radius: 50%; position: relative; background: radial-gradient(circle at 35% 30%, #7fe3c9, #16a37e 60%, #0d7a5f); border: 3px solid #fff; box-shadow: 0 0 0 4px rgba(22,163,126,0.3), 0 2px 6px rgba(0,0,0,0.3); }\r\n  .usted-aquiRt-pin::before { content: \"\"; position: absolute; inset: -8px; border-radius: 50%; background: rgba(22,163,126,0.35); animation: pulsoRt 1.8s infinite; }\r\n  @keyframes pulsoRt { 0% { transform: scale(0.6); opacity: 0.8; } 100% { transform: scale(2.4); opacity: 0; } }\r\n\r\n  \/* ---- L\u00ednea de ruta: halo\/glow + l\u00ednea principal + flujo de puntos ---- *\/\r\n  .ruta-glowRt {\r\n    fill: none;\r\n    stroke: #5eeac2;\r\n    stroke-width: 8px;\r\n    stroke-linecap: round;\r\n    stroke-linejoin: round;\r\n    vector-effect: non-scaling-stroke;\r\n    opacity: 0.55;\r\n    filter: blur(2.5px);\r\n  }\r\n  .ruta-lineaRt {\r\n    fill: none;\r\n    stroke: #3BA492;\r\n    stroke-width: 6px;\r\n    stroke-linecap: round;\r\n    stroke-linejoin: round;\r\n    vector-effect: non-scaling-stroke;\r\n    filter: drop-shadow(0 0 5px rgba(24,214,154,0.85));\r\n  }\r\n  .ruta-flujoRt {\r\n    stroke-dasharray: 3 9;\r\n    animation: flujoRt 0.85s linear infinite;\r\n  }\r\n  @keyframes flujoRt {\r\n    to { stroke-dashoffset: -12; }\r\n  }\r\n\r\n  \/* Respeta a quienes prefieren menos movimiento (la l\u00ednea de ruta queda excluida a prop\u00f3sito) *\/\r\n  @media (prefers-reduced-motion: reduce) {\r\n    .contenedor-mapaRt, .punto-mapaRt, .usted-aquiRt, .icono-flotanteRt {\r\n      animation: none !important;\r\n      opacity: 1 !important;\r\n    }\r\n  }\r\n<\/style>\r\n<script>\r\nwindow.QuantumMapa = window.QuantumMapa || { puntoPartida: null, puntoDestino: null, pintarUstedAqui: null };\r\n\r\n(function () {\r\n  \/\/ ============================================================\r\n  \/\/  L\u00d3GICA DE BOTONES\r\n  \/\/ ============================================================\r\n  function cambiarContenedorElementor(mostrarId, ocultarId) {\r\n    var elMostrar = document.getElementById(mostrarId);\r\n    var elOcultar = document.getElementById(ocultarId);\r\n    if (elMostrar) elMostrar.style.setProperty(\"display\", \"block\", \"important\");\r\n    if (elOcultar) elOcultar.style.setProperty(\"display\", \"none\", \"important\");\r\n  }\r\n\r\n  document.getElementById('btn-peatonal-1').addEventListener('click', function() { cambiarContenedorElementor('peatonal', 'vehicular'); });\r\n  document.getElementById('btn-vehicular-1').addEventListener('click', function() { cambiarContenedorElementor('vehicular', 'peatonal'); });\r\n\r\n  \/\/ ============================================================\r\n  \/\/ 1. POSICIONES\r\n  \/\/ ============================================================\r\n  var POSICIONES = {\r\n    \"1\": { top: 19.6, left: 2.6,  generic: false },\r\n    A:   { top: 33.0, left: 11.3, generic: false },\r\n    B:   { top: 32.6, left: 17.6, generic: false },\r\n    C:   { top: 28.8, left: 25.1, generic: false },\r\n    D:   { top: 55.0, left: 18.3, generic: false },\r\n    E:   { top: 62.7, left: 23.6, generic: false },\r\n    F:   { top: 45.0, left: 26.2, generic: false },\r\n    G:   { top: 44.7, left: 34.9, generic: false },\r\n    H:   { top: 45.6, left: 42.9, generic: false },\r\n    I:   { top: 34.7, left: 48.0, generic: false },\r\n    J:   { top: 55.6, left: 73.1, generic: false },\r\n    K:   { top: 54.4, left: 90.9, generic: false },\r\n    M:   { top: 35.5, left: 40.2, generic: false },\r\n    N:   { top: 70.7, left: 26.2, generic: false },\r\n    O:   { top: 81.0, left: 18.3, generic: false }\r\n  };\r\n\r\n  var ESPECIALES = [\"1\", \"N\", \"O\", \"M\"];\r\n\r\n  var NODOS_CAMINO = {\r\n    R1: { top: 21.9, left: 4.1 },\r\n    R2: { top: 28.4, left: 6.1 },\r\n    R3: { top: 33.2, left: 7 },\r\n    R4: { top: 41.4, left: 7.7 },\r\n    R5: { top: 46.8, left: 8.6 },\r\n    R6: { top: 52.8, left: 10.2 },\r\n    R7: { top: 60.1, left: 12.7 },\r\n    R8: { top: 53.8, left: 15.8 },\r\n    R9: { top: 25.1, left: 7.4 },\r\n    R10: { top: 26.7, left: 9.5 },\r\n    R11: { top: 25.4, left: 11.8 },\r\n    R12: { top: 21.9, left: 14.1 },\r\n    R13: { top: 20.3, left: 15.9 },\r\n    R14: { top: 19.3, left: 19.7 },\r\n    R15: { top: 29.1, left: 19.6 },\r\n    R16: { top: 20.3, left: 22.7 },\r\n    R17: { top: 22.1, left: 25.4 },\r\n    R18: { top: 26.9, left: 25.3 },\r\n    R19: { top: 41.4, left: 13.4 },\r\n    R20: { top: 41.5, left: 16.3 },\r\n    R21: { top: 41.7, left: 22.9 },\r\n    R22: { top: 47.4, left: 22.9 },\r\n    R23: { top: 54.9, left: 25.8 },\r\n    R24: { top: 64.2, left: 19.2 },\r\n    R25: { top: 66.9, left: 20.7 },\r\n    R26: { top: 41.3, left: 25.3 },\r\n    R27: { top: 37.7, left: 25.1 },\r\n    R28: { top: 38.8, left: 32.2 },\r\n    R29: { top: 39.6, left: 36.9 },\r\n    R30: { top: 40.2, left: 40.7 },\r\n    R31: { top: 41.3, left: 49.1 },\r\n    R32: { top: 40.8, left: 52.1 },\r\n    R33: { top: 39.5, left: 54 },\r\n    R34: { top: 39.9, left: 56.4 },\r\n    R35: { top: 40.7, left: 59.4 },\r\n    R36: { top: 40.3, left: 62.6 },\r\n    R37: { top: 28.1, left: 60.1 },\r\n    R38: { top: 34.9, left: 72.3 },\r\n    R39: { top: 20.3, left: 72.5 },\r\n    R40: { top: 49.3, left: 61.7 },\r\n    R41: { top: 54.7, left: 71.8 },\r\n    R42: { top: 26.4, left: 86.5 },\r\n    R43: { top: 30.5, left: 87.5 },\r\n    R44: { top: 34.9, left: 88.9 },\r\n    R45: { top: 40.4, left: 91.7 },\r\n    R46: { top: 51.5, left: 97.1 },\r\n    R47: { top: 53.5, left: 92 },\r\n    R48: { top: 35.2, left: 48 },\r\n    R49: { top: 25.6, left: 31.4 },\r\n    R50: { top: 28.4, left: 37.5 },\r\n    R51: { top: 28.5, left: 40.3 },\r\n    R52: { top: 32.6, left: 40.3 },\r\n    R53: { top: 43.9, left: 27 },\r\n    R54: { top: 40.9, left: 46.2 },\r\n    R55: { top: 35.4, left: 45.9 },\r\n    R56: { top: 33, left: 10 },\r\n    R57: { top: 44.9, left: 34.8 },\r\n    R58: { top: 45.5, left: 42.8 },\r\n    R59: { top: 65.6, left: 15.4 },\r\n    R60: { top: 69.4, left: 18.9 },\r\n    R61: { top: 71.1, left: 22.8 },\r\n    R62: { top: 71, left: 26.1 },\r\n    R63: { top: 67.2, left: 30.4 },\r\n    R64: { top: 69.9, left: 28.1 },\r\n    R65: { top: 53.4, left: 61 },\r\n    R66: { top: 60.7, left: 66.3 },\r\n    R67: { top: 69.7, left: 70.8 },\r\n    R68: { top: 74, left: 75.2 },\r\n    R69: { top: 72.9, left: 79.4 },\r\n    R70: { top: 69.1, left: 82.7 },\r\n    R71: { top: 64.2, left: 86.6 },\r\n    R72: { top: 63.9, left: 90.9 },\r\n    R73: { top: 66.3, left: 94.1 },\r\n    R74: { top: 61.9, left: 95.9 },\r\n    R75: { top: 57.2, left: 96.8 },\r\n    R76: { top: 32.3, left: 16.2 },\r\n    R77: { top: 53.4, left: 32.9 },\r\n    R78: { top: 52, left: 36.7 },\r\n    R79: { top: 57.3, left: 40.4 },\r\n    R80: { top: 59.6, left: 36.7 },\r\n    R81: { top: 63.4, left: 32.8 },\r\n  };\r\n\r\n  var ARISTAS_CAMINO = [\r\n    [\"R1\",\"R2\"],[\"R2\",\"R3\"],[\"R3\",\"R4\"],[\"R4\",\"R19\"],[\"R19\",\"R20\"],[\"R20\",\"R21\"],\r\n    [\"R21\",\"R22\"],[\"R22\",\"R23\"],[\"R23\",\"R24\"],[\"R24\",\"R25\"],[\"R21\",\"R26\"],[\"R26\",\"R27\"],\r\n    [\"R27\",\"R28\"],[\"R28\",\"R29\"],[\"R29\",\"R30\"],[\"R30\",\"R54\"],[\"R54\",\"R31\"],[\"R31\",\"R32\"],\r\n    [\"R32\",\"R33\"],[\"R33\",\"R34\"],[\"R34\",\"R35\"],[\"R35\",\"R36\"],[\"R36\",\"R38\"],[\"R38\",\"R42\"],\r\n    [\"R42\",\"R43\"],[\"R43\",\"R44\"],[\"R44\",\"R45\"],[\"R45\",\"R46\"],[\"R46\",\"R47\"],[\"R36\",\"R37\"],\r\n    [\"R36\",\"R40\"],[\"R38\",\"R39\"],[\"R40\",\"R41\"],[\"R3\",\"R56\"],[\"R1\",\"R9\"],[\"R9\",\"R10\"],\r\n    [\"R10\",\"R11\"],[\"R11\",\"R12\"],[\"R12\",\"R13\"],[\"R13\",\"R14\"],[\"R14\",\"R16\"],[\"R16\",\"R17\"],\r\n    [\"R17\",\"R49\"],[\"R49\",\"R50\"],[\"R50\",\"R51\"],[\"R15\",\"R14\"],[\"R18\",\"R17\"],[\"R51\",\"R52\"],\r\n    [\"R4\",\"R5\"],[\"R5\",\"R6\"],[\"R6\",\"R7\"],[\"R7\",\"R8\"],[\"R26\",\"R53\"],[\"R57\",\"R29\"],\r\n    [\"R58\",\"R30\"],[\"R54\",\"R55\"],[\"R55\",\"R48\"],[\"R7\",\"R59\"],[\"R59\",\"R60\"],[\"R60\",\"R61\"],\r\n    [\"R61\",\"R62\"],[\"R64\",\"R63\"],[\"R63\",\"R23\"],[\"R64\",\"R62\"],[\"R65\",\"R40\"],[\"R66\",\"R67\"],\r\n    [\"R65\",\"R66\"],[\"R68\",\"R67\"],[\"R46\",\"R75\"],[\"R75\",\"R74\"],[\"R74\",\"R73\"],[\"R72\",\"R73\"],\r\n    [\"R72\",\"R71\"],[\"R71\",\"R70\"],[\"R70\",\"R69\"],[\"R69\",\"R68\"],\r\n    [\"R18\",\"R27\"],[\"R13\",\"R76\"],[\"R20\",\"R76\"],[\"R79\",\"R80\"],[\"R81\",\"R63\"],[\"R80\",\"R81\"],\r\n    [\"R79\",\"R30\"],[\"R80\",\"R78\"],[\"R78\",\"R77\"],[\"R77\",\"R28\"],[\"R77\",\"R23\"],\r\n    [\"R52\",\"R30\"],\r\n  ];\r\n\r\n  var container = document.getElementById(\"contenedor-mapaRt\");\r\n  var svgRutas = document.getElementById(\"svg-rutasRt\");\r\n\r\n  function crearBotones() {\r\n    var indice = 0;\r\n    Object.keys(POSICIONES).forEach(function (id) {\r\n      var pos = POSICIONES[id];\r\n      var btn = document.createElement(\"button\");\r\n      var cls = \"punto-mapaRt\";\r\n      if (pos.generic) cls += \" punto-genericoRt\";\r\n      else if (ESPECIALES.indexOf(id) !== -1) cls += \" punto-especialRt\";\r\n      btn.className = cls;\r\n      btn.style.top = pos.top + \"%\";\r\n      btn.style.left = pos.left + \"%\";\r\n      btn.style.setProperty(\"--retraso\", (0.15 + indice * 0.025) + \"s\");\r\n      btn.dataset.id = id;\r\n      btn.textContent = id.replace(\/[0-9]\/g, \"\") || id;\r\n      container.appendChild(btn);\r\n      indice++;\r\n    });\r\n  }\r\n  crearBotones();\r\n\r\n  function construirGrafo() {\r\n    var adj = {};\r\n    function addEdge(a, b, w) {\r\n      adj[a] = adj[a] || [];\r\n      adj[b] = adj[b] || [];\r\n      adj[a].push({ to: b, w: w });\r\n      adj[b].push({ to: a, w: w });\r\n    }\r\n    function distPct(p1, p2) {\r\n      var dx = p1.left - p2.left, dy = p1.top - p2.top;\r\n      return Math.sqrt(dx * dx + dy * dy);\r\n    }\r\n    ARISTAS_CAMINO.forEach(function (a) {\r\n      var n1 = NODOS_CAMINO[a[0]], n2 = NODOS_CAMINO[a[1]];\r\n      if (n1 && n2) addEdge(a[0], a[1], distPct(n1, n2));\r\n    });\r\n    var conexionEdificio = {};\r\n    Object.keys(POSICIONES).forEach(function (idEdif) {\r\n      var pe = POSICIONES[idEdif];\r\n      var mejor = null, mejorD = Infinity;\r\n      Object.keys(NODOS_CAMINO).forEach(function (idNodo) {\r\n        var d = distPct(pe, NODOS_CAMINO[idNodo]);\r\n        if (d < mejorD) { mejorD = d; mejor = idNodo; }\r\n      });\r\n      if (mejor) {\r\n        addEdge(idEdif, mejor, mejorD);\r\n        conexionEdificio[idEdif] = mejor;\r\n      }\r\n    });\r\n    return { adj: adj, conexionEdificio: conexionEdificio };\r\n  }\r\n\r\n  function dijkstra(adj, inicio, fin) {\r\n    var dist = {}, prev = {}, visitado = {};\r\n    Object.keys(adj).forEach(function (k) { dist[k] = Infinity; });\r\n    dist[inicio] = 0;\r\n    var cola = [[0, inicio]];\r\n    while (cola.length) {\r\n      cola.sort(function (a, b) { return a[0] - b[0]; });\r\n      var actual = cola.shift();\r\n      var u = actual[1];\r\n      if (visitado[u]) continue;\r\n      visitado[u] = true;\r\n      if (u === fin) break;\r\n      (adj[u] || []).forEach(function (arista) {\r\n        var nd = actual[0] + arista.w;\r\n        if (nd < dist[arista.to]) {\r\n          dist[arista.to] = nd;\r\n          prev[arista.to] = u;\r\n          cola.push([nd, arista.to]);\r\n        }\r\n      });\r\n    }\r\n    if (dist[fin] === undefined || dist[fin] === Infinity) return null;\r\n    var camino = [];\r\n    var cur = fin;\r\n    while (cur !== undefined) {\r\n      camino.unshift(cur);\r\n      if (cur === inicio) break;\r\n      cur = prev[cur];\r\n    }\r\n    return { camino: camino, distancia: dist[fin] };\r\n  }\r\n\r\n  function coordDe(id) {\r\n    if (NODOS_CAMINO[id]) return NODOS_CAMINO[id];\r\n    if (POSICIONES[id]) return POSICIONES[id];\r\n    return null;\r\n  }\r\n\r\n  var rutaActualPuntos = null;\r\n\r\n  function redibujarSvg() {\r\n    while (svgRutas.firstChild) svgRutas.removeChild(svgRutas.firstChild);\r\n    if (!rutaActualPuntos) return;\r\n\r\n    var ns = \"http:\/\/www.w3.org\/2000\/svg\";\r\n    var puntosStr = rutaActualPuntos.map(function (p) { return p.left + \",\" + p.top; }).join(\" \");\r\n\r\n    \/\/ Halo debajo (efecto de brillo)\r\n    var glowLine = document.createElementNS(ns, \"polyline\");\r\n    glowLine.setAttribute(\"points\", puntosStr);\r\n    glowLine.setAttribute(\"class\", \"ruta-glowRt\");\r\n    svgRutas.appendChild(glowLine);\r\n\r\n    \/\/ L\u00ednea principal\r\n    var poly = document.createElementNS(ns, \"polyline\");\r\n    poly.setAttribute(\"points\", puntosStr);\r\n    poly.setAttribute(\"class\", \"ruta-lineaRt\");\r\n    svgRutas.appendChild(poly);\r\n\r\n    \/\/ La animaci\u00f3n de \"dibujado\" de la ruta se muestra siempre,\r\n    \/\/ sin importar la preferencia prefers-reduced-motion del dispositivo.\r\n    var len = poly.getTotalLength();\r\n\r\n    [poly, glowLine].forEach(function (linea) {\r\n      linea.style.strokeDasharray = len;\r\n      linea.style.strokeDashoffset = len;\r\n    });\r\n\r\n    \/\/ Fuerza reflow para que la transici\u00f3n se dispare de verdad\r\n    poly.getBoundingClientRect();\r\n\r\n    var duracion = Math.min(1.6, Math.max(0.5, len * 0.012)) + \"s\";\r\n    requestAnimationFrame(function () {\r\n      poly.style.transition = \"stroke-dashoffset \" + duracion + \" cubic-bezier(0.65, 0, 0.35, 1)\";\r\n      glowLine.style.transition = \"stroke-dashoffset \" + duracion + \" cubic-bezier(0.65, 0, 0.35, 1)\";\r\n      poly.style.strokeDashoffset = \"0\";\r\n      glowLine.style.strokeDashoffset = \"0\";\r\n    });\r\n\r\n    poly.addEventListener(\"transitionend\", function alTerminar() {\r\n      poly.removeEventListener(\"transitionend\", alTerminar);\r\n      poly.style.strokeDasharray = \"\";\r\n      poly.classList.add(\"ruta-flujoRt\");\r\n    });\r\n  }\r\n\r\n  function dibujarRuta(origenId, destinoId) {\r\n    if (!origenId || !destinoId || Object.keys(NODOS_CAMINO).length === 0) {\r\n      rutaActualPuntos = null;\r\n      redibujarSvg();\r\n      return null;\r\n    }\r\n    var grafo = construirGrafo();\r\n    var resultado = dijkstra(grafo.adj, origenId, destinoId);\r\n    if (!resultado) {\r\n      rutaActualPuntos = null;\r\n      redibujarSvg();\r\n      return null;\r\n    }\r\n    rutaActualPuntos = resultado.camino.map(coordDe).filter(Boolean);\r\n    redibujarSvg();\r\n    var metros = resultado.distancia * METROS_POR_PORCENTAJE;\r\n    return { distancia: resultado.distancia, distanciaTexto: Math.round(metros) + \" m (aprox.)\", camino: resultado.camino };\r\n  }\r\n\r\n  var METROS_POR_PORCENTAJE = 5;\r\n\r\n  window.QuantumMapa.dibujarRuta = dibujarRuta;\r\n\r\n  window.QuantumMapa.pintarUstedAquiMapa = function (idForzado) {\r\n    var id = idForzado || window.QuantumMapa.puntoPartida;\r\n    var pos = POSICIONES[id];\r\n    if (!pos) return;\r\n    var previo = document.getElementById(\"usted-aqui-marcadorRt\");\r\n    if (previo) previo.remove();\r\n    var marcador = document.createElement(\"div\");\r\n    marcador.id = \"usted-aqui-marcadorRt\";\r\n    marcador.className = \"usted-aquiRt\";\r\n    marcador.style.top = pos.top + \"%\";\r\n    marcador.style.left = pos.left + \"%\";\r\n    marcador.innerHTML =\r\n      '<span class=\"usted-aquiRt-etiqueta\">Usted est\u00e1 aqu\u00ed<\/span>' +\r\n      '<span class=\"usted-aquiRt-pin\"><\/span>';\r\n    container.appendChild(marcador);\r\n  };\r\n\r\n  document.getElementById(\"btn-cambiar-partidaRt\").addEventListener(\"click\", function () {\r\n\r\n    var secDestino = document.getElementById(\"seccion-destino\");\r\n    var secRutas = document.getElementById(\"seccion-rutas\");\r\n    if (secRutas) secRutas.style.setProperty(\"display\", \"none\", \"important\");\r\n    if (secDestino) secDestino.style.setProperty(\"display\", \"block\", \"important\");\r\n\r\n    rutaActualPuntos = null;\r\n    redibujarSvg();\r\n    window.QuantumMapa.puntoDestino = null;\r\n  });\r\n\r\n  document.addEventListener(\"puntoDestinoSeleccionado\", function (e) {\r\n    var destinoId = e.detail.id;\r\n    if (window.QuantumMapa.puntoPartida) {\r\n      dibujarRuta(window.QuantumMapa.puntoPartida, destinoId);\r\n    }\r\n    if (typeof window.QuantumMapa.pintarUstedAquiMapa === \"function\") {\r\n      window.QuantumMapa.pintarUstedAquiMapa();\r\n    }\r\n  });\r\n\r\n  if (window.QuantumMapa.puntoPartida) {\r\n    window.QuantumMapa.pintarUstedAquiMapa(window.QuantumMapa.puntoPartida);\r\n  }\r\n\r\n  (function inicializarVisibilidad() {\r\n    var elVeh = document.getElementById('vehicular');\r\n    var elPie = document.getElementById('peatonal');\r\n    if (elVeh) elVeh.style.setProperty(\"display\", \"none\", \"important\");\r\n    if (elPie) elPie.style.setProperty(\"display\", \"block\", \"important\");\r\n  })();\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ac04bd2 e-con-full e-flex e-con e-child\" data-id=\"ac04bd2\" data-element_type=\"container\" id=\"vehicular\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7dd2592 elementor-widget elementor-widget-html\" data-id=\"7dd2592\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"contenedor-principal-veh\" id=\"contenedor-principal-veh\">\r\n  <div class=\"barra-herramientas-veh\">\r\n    <button id=\"btn-cambiar-partida-veh\" class=\"btn-cambiar-partida-veh\">Elegir otro destino<\/button>\r\n  <\/div>\r\n \r\n  <div class=\"contenedor-mapa-veh\" id=\"contenedor-mapa-veh\">\r\n    <img decoding=\"async\"\r\n      class=\"imagen-mapa-veh\"\r\n      id=\"imagen-mapa-veh\"\r\n      src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/fondo_quantum-scaled.png\"\r\n      alt=\"Mapa Quantum Ciudad del Conocimiento\"\r\n    \/>\r\n    <svg class=\"svg-ruta-veh\" id=\"svg-ruta-veh\" viewbox=\"0 0 100 100\" preserveaspectratio=\"none\">\r\n    <\/svg>\r\n \r\n    <!-- ICONO FLOTANTE SOBRE EL PUNTO 1 -->\r\n    <img decoding=\"async\"\r\n      class=\"icono-flotante-veh\"\r\n      id=\"icono-flotante-veh\"\r\n      src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/entrada_quantum.png\"\r\n      alt=\"Entrada\"\r\n    \/>\r\n \r\n    <!-- OVERLAY: se muestra cuando la ruta calculada es solo peatonal -->\r\n    <div class=\"overlay-solo-peatonal-veh\" id=\"overlay-solo-peatonal-veh\">\r\n      <img decoding=\"async\" src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/peatones.png\" alt=\"Puede llegar caminando\" \/>\r\n    <\/div>\r\n \r\n    <!-- INICIO DE BOTONES Y CARTEL (Ruta Vehicular) -->\r\n    <div class=\"ui-flotante-izq-veh\">\r\n      <div class=\"botones-transporte-veh\">\r\n \r\n        <button class=\"btn-mockup\" id=\"btn-peatonal-veh\" style=\"background: #a4b4b8;\">\r\n          <img decoding=\"async\" src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/peaton_des.png\" alt=\"Peatonal\" \/>\r\n        <\/button>\r\n        <button class=\"btn-mockup\" id=\"btn-vehicular-veh\" style=\"background: #3c6e64;\">\r\n          <img decoding=\"async\" src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/carro_act.png\" alt=\"Vehicular\" \/>\r\n        <\/button>\r\n      <\/div>\r\n \r\n      <!-- CARTEL -->\r\n     <div class=\"cartel-vehicular\" id=\"cartel-vehicular\">\r\n        <button class=\"btn-cerrar-cartel-veh\" id=\"btn-cerrar-cartel-veh\" aria-label=\"Cerrar cartel\">&times;<\/button>\r\n        <img decoding=\"async\" src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/iconos_pro.png\" alt=\"Cartel\" style=\"max-width: 100%; max-height: 100%; object-fit: contain;\" \/>\r\n      <\/div>\r\n\r\n      <!-- Bot\u00f3n chiquito para reabrir el cartel (oculto hasta que se cierre el cartel) -->\r\n      <button class=\"btn-mockup btn-reabrir-cartel-veh\" id=\"btn-reabrir-cartel-veh\" style=\"background: #16a37e;\" aria-label=\"Mostrar informaci\u00f3n\" title=\"Mostrar informaci\u00f3n\">\r\n        <img decoding=\"async\" src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/ojo.png\" alt=\"Info\" id=\"icono-reabrir-cartel-veh\" \/>\r\n      <\/button>\r\n    <\/div>\r\n    <!-- FIN DE BOTONES Y CARTEL -->\r\n \r\n  <\/div>\r\n<\/div>\r\n \r\n<style>\r\n  \/* CSS NUEVO PARA BOTONES Y CARTEL EN VEHICULAR *\/\r\n  .ui-flotante-izq-veh { position: absolute; left: 15px; top: 40%; display: flex; flex-direction: column; gap: 10px; z-index: 10; }\r\n  .botones-transporte-veh { display: flex; flex-direction: column; gap: 8px; width: fit-content;}\r\n\r\n  .btn-mockup { width: 45px; height: 45px; border: none; border-radius: 4px; padding: 5px; cursor: pointer; box-shadow: 0 4px 6px rgba(0,0,0,0.2); transition: transform 0.2s; }\r\n  .btn-mockup:hover { transform: scale(1.05); }\r\n  .btn-mockup img { width: 100%; height: 100%; object-fit: contain; }\r\n\r\n  \/* ESTILOS DEL CARTEL BASADOS EN LA IMAGEN *\/\r\n  .cartel-vehicular {\r\n    position: relative;\r\n    background-color: #16a37e;\r\n    color: white;\r\n    width: 220px;\r\n    height: 130px;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    text-align: center;\r\n    font-weight: 500;\r\n    font-size: 15px;\r\n    border-radius: 9px;\r\n    box-shadow: 0 4px 10px rgba(0,0,0,0.25);\r\n    padding: 11px;\r\n    line-height: 1.3;\r\n  }\r\n\r\n  \/* Tachita para cerrar el cartel *\/\r\n  .btn-cerrar-cartel-veh {\r\n    position: absolute;\r\n    top: 6px;\r\n    right: 6px;\r\n    width: 26px;\r\n    height: 26px;\r\n    border: none;\r\n    border-radius: 50%;\r\n    background: #7AABBE;\r\n    color: #fff;\r\n    font-size: 18px;\r\n    line-height: 1;\r\n    font-weight: 700;\r\n    cursor: pointer;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    padding: 0;\r\n    transition: background 0.2s, transform 0.2s;\r\n  }\r\n  .btn-cerrar-cartel-veh:hover { background: #5f8fa3; transform: scale(1.08); }\r\n\r\n  \/* Bot\u00f3n chiquito para reabrir el cartel *\/\r\n  .btn-reabrir-cartel-veh { display: none; }\r\n  .btn-reabrir-cartel-veh.visible-reabrir-veh { display: block; }\r\n\r\n  \/* OVERLAY DE \"SOLO PEATONAL\" (cuando no hay tramo vehicular) *\/\r\n  .overlay-solo-peatonal-veh {\r\n    display: none;\r\n    position: absolute;\r\n    inset: 0;\r\n    z-index: 6;\r\n  }\r\n  .overlay-solo-peatonal-veh.activo-overlay-veh { display: block; }\r\n  .overlay-solo-peatonal-veh img {\r\n    width: 100%;\r\n    height: 100%;\r\n    object-fit: cover;\r\n    display: block;\r\n  }\r\n\r\n  \/* ESTILOS ORIGINALES DE MAPA Y PUNTOS *\/\r\n  .contenedor-principal-veh {\r\n    font-family: 'Segoe UI', system-ui, -apple-system, sans-serif;\r\n    width: 100%;\r\n    max-width: 100%;\r\n    margin: 0 auto;\r\n    position: relative;\r\n  }\r\n  .barra-herramientas-veh { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; flex-wrap: wrap; }\r\n\r\n  .btn-cambiar-partida-veh {\r\n    background: #3c6e64; color: #fff; border: none; padding: 8px 16px; border-radius: 20px;\r\n    font-weight: 600; font-size: 12.5px; cursor: pointer; margin-left: auto;\r\n  }\r\n  .btn-cambiar-partida-veh:hover { background: #2c544c; }\r\n\r\n  \/* overflow visible para que el icono de entrada y el pin \"usted est\u00e1 aqu\u00ed\" puedan salir del contenedor *\/\r\n  .contenedor-mapa-veh {\r\n    position: relative; width: 100%; border-radius: 10px; overflow: visible; box-shadow: 0 4px 18px rgba(0,0,0,0.15);\r\n    opacity: 0;\r\n    animation: aparecerMapaVeh 0.7s cubic-bezier(0.16, 1, 0.3, 1) forwards;\r\n  }\r\n  @keyframes aparecerMapaVeh {\r\n    from { opacity: 0; transform: scale(0.97); }\r\n    to   { opacity: 1; transform: scale(1); }\r\n  }\r\n\r\n  \/* el redondeado ahora vive en la imagen, ya que el contenedor ya no recorta *\/\r\n  .imagen-mapa-veh { width: 100%; display: block; user-select: none; -webkit-user-drag: none; border-radius: 10px; }\r\n  .svg-ruta-veh { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 4; }\r\n\r\n  \/* ---- Icono flotante sobre el punto 1 ---- *\/\r\n  .icono-flotante-veh {\r\n    position: absolute;\r\n    top: 19.6%;\r\n    left: 2.6%;\r\n    width: 9%;\r\n    max-width: 70px;\r\n    min-width: 30px;\r\n    transform: translate(-50%, calc(-100% - 14px));\r\n    pointer-events: none;\r\n    user-select: none;\r\n    -webkit-user-drag: none;\r\n    filter: drop-shadow(0 6px 10px rgba(0,0,0,0.28));\r\n    opacity: 0;\r\n    animation:\r\n      aparecerIconoVeh 0.6s cubic-bezier(0.16, 1, 0.3, 1) 0.5s forwards,\r\n      flotarVeh 3.2s ease-in-out 1.1s infinite;\r\n    z-index: 6;\r\n  }\r\n  @keyframes aparecerIconoVeh {\r\n    from { opacity: 0; transform: translate(-50%, calc(-100% - 14px)) scale(0.6); }\r\n    to   { opacity: 1; transform: translate(-50%, calc(-100% - 14px)) scale(1); }\r\n  }\r\n  @keyframes flotarVeh {\r\n    0%, 100% { transform: translate(-50%, calc(-100% - 14px)); }\r\n    50%      { transform: translate(-50%, calc(-100% - 22px)); }\r\n  }\r\n\r\n  .punto-mapa-veh {\r\n    position: absolute; width: 26px; height: 26px; border-radius: 50%;\r\n    background: linear-gradient(180deg, #48968C 0%, #2a5e60 100%);\r\n    border: 2px solid; color: #fff; font-weight: bold; font-size: 13px; cursor: pointer;\r\n    transform: translate(-50%, -50%); box-shadow: 0 2px 4px rgba(0,0,0,0.2);\r\n    transition: transform 0.2s ease, filter 0.2s ease;\r\n    display: flex; align-items: center; justify-content: center;\r\n    padding: 0; z-index: 5;\r\n    opacity: 0;\r\n    animation: aparecerPuntoVeh 0.45s cubic-bezier(0.16, 1, 0.3, 1) forwards;\r\n    animation-delay: var(--retraso, 0s);\r\n  }\r\n  .punto-mapa-veh.punto-generico-veh { background: linear-gradient(180deg, #62828C 0%, #A4BDD1 100%); font-size: 11px; }\r\n  .punto-mapa-veh.punto-especial-veh { background: linear-gradient(180deg, #585F7C 0%, #618BA9 100%); }\r\n  .punto-mapa-veh:hover { transform: translate(-50%, -50%) scale(1.15); filter: brightness(1.2); }\r\n\r\n  @keyframes aparecerPuntoVeh {\r\n    from { opacity: 0; transform: translate(-50%, -50%) scale(0.3); }\r\n    to   { opacity: 1; transform: translate(-50%, -50%) scale(1); }\r\n  }\r\n\r\n  \/* \u00edcono de estacionamiento: solo visual, no clicable *\/\r\n  .icono-estacionamiento-veh {\r\n    position: absolute; width: 30px; height: 30px;\r\n    transform: translate(-50%, -50%);\r\n    z-index: 5; pointer-events: none;\r\n  }\r\n  .icono-estacionamiento-veh img { width: 100%; height: 100%; object-fit: contain; display: block; }\r\n\r\n  .usted-aqui-veh {\r\n    position: absolute; transform: translate(-50%, -100%); z-index: 6; display: flex; flex-direction: column; align-items: center; pointer-events: none;\r\n    animation: aparecerPinVeh 0.4s cubic-bezier(0.16, 1, 0.3, 1) forwards;\r\n  }\r\n  @keyframes aparecerPinVeh {\r\n    from { opacity: 0; transform: translate(-50%, -100%) scale(0.5); }\r\n    to   { opacity: 1; transform: translate(-50%, -100%) scale(1); }\r\n  }\r\n  .usted-aqui-veh-etiqueta { background: #16a37e; color: #fff; font-size: 11px; font-weight: 700; padding: 5px 12px; border-radius: 7px; white-space: nowrap; margin-bottom: 6px; box-shadow: 0 3px 8px rgba(0,0,0,0.3); position: relative; }\r\n  .usted-aqui-veh-etiqueta::after { content: \"\"; position: absolute; bottom: -5px; left: 50%; transform: translateX(-50%); border-width: 5px 5px 0 5px; border-style: solid; border-color: #16a37e transparent transparent transparent; }\r\n  .usted-aqui-veh-pin { width: 18px; height: 18px; border-radius: 50%; position: relative; background: radial-gradient(circle at 35% 30%, #7fe3c9, #16a37e 60%, #0d7a5f); border: 3px solid #fff; box-shadow: 0 0 0 4px rgba(22,163,126,0.3), 0 2px 6px rgba(0,0,0,0.3); }\r\n  .usted-aqui-veh-pin::before { content: \"\"; position: absolute; inset: -8px; border-radius: 50%; background: rgba(22,163,126,0.35); animation: pulso-veh 1.8s infinite; }\r\n  @keyframes pulso-veh { 0% { transform: scale(0.6); opacity: 0.8; } 100% { transform: scale(2.4); opacity: 0; } }\r\n\r\n  \/* ---- Halo\/glow de las l\u00edneas de ruta ---- *\/\r\n  .ruta-glow-veh {\r\n    fill: none;\r\n    stroke-linecap: round;\r\n    stroke-linejoin: round;\r\n    vector-effect: non-scaling-stroke;\r\n    opacity: 0.55;\r\n    filter: blur(2.5px);\r\n  }\r\n  .ruta-flujo-veh {\r\n    animation: flujoVeh 0.9s linear infinite;\r\n  }\r\n  @keyframes flujoVeh {\r\n    to { stroke-dashoffset: -10; }\r\n  }\r\n\r\n  #vehicular {\r\n    display: none !important;\r\n  }\r\n<\/style>\r\n\r\n<script>\r\nwindow.QuantumMapa = window.QuantumMapa || { puntoPartida: null, puntoDestino: null, pintarUstedAqui: null };\r\n\r\n(function () {\r\n  \/\/ ============================================================\r\n  \/\/ 0. L\u00d3GICA ELEMENTOR PARA BOTONES VEHICULARES\r\n  \/\/ ============================================================\r\n  function cambiarContenedorElementor(mostrarId, ocultarId) {\r\n    var elMostrar = document.getElementById(mostrarId);\r\n    var elOcultar = document.getElementById(ocultarId);\r\n    if (elMostrar) elMostrar.style.setProperty(\"display\", \"block\", \"important\");\r\n    if (elOcultar) elOcultar.style.setProperty(\"display\", \"none\", \"important\");\r\n  }\r\n\r\n  \/\/ ---- Cerrar \/ reabrir el cartel informativo ----\r\n  var cartelVeh = document.getElementById('cartel-vehicular');\r\n  var btnCerrarCartel = document.getElementById('btn-cerrar-cartel-veh');\r\n  var btnReabrirCartel = document.getElementById('btn-reabrir-cartel-veh');\r\n\r\n  if (btnCerrarCartel && cartelVeh && btnReabrirCartel) {\r\n    btnCerrarCartel.addEventListener('click', function () {\r\n      cartelVeh.style.setProperty('display', 'none', 'important');\r\n      btnReabrirCartel.classList.add('visible-reabrir-veh');\r\n    });\r\n    btnReabrirCartel.addEventListener('click', function () {\r\n      cartelVeh.style.setProperty('display', 'flex', 'important');\r\n      btnReabrirCartel.classList.remove('visible-reabrir-veh');\r\n    });\r\n  }\r\n\r\n  document.getElementById('btn-peatonal-veh').addEventListener('click', function() { cambiarContenedorElementor('peatonal', 'vehicular'); });\r\n  document.getElementById('btn-vehicular-veh').addEventListener('click', function() { cambiarContenedorElementor('vehicular', 'peatonal'); });\r\n\r\n  \/\/ ============================================================\r\n  \/\/ 1. POSICIONES\r\n  \/\/ ============================================================\r\n  var POSICIONES = {\r\n    \"1\": { top: 19.6, left: 2.6,  generic: false },\r\n    A:   { top: 33.0, left: 11.3, generic: false },\r\n    B:   { top: 32.6, left: 17.6, generic: false },\r\n    C:   { top: 28.8, left: 25.1, generic: false },\r\n    D:   { top: 55.0, left: 18.3, generic: false },\r\n    E:   { top: 62.7, left: 23.6, generic: false },\r\n    F:   { top: 45.0, left: 26.2, generic: false },\r\n    G:   { top: 44.7, left: 34.9, generic: false },\r\n    H:   { top: 45.6, left: 42.9, generic: false },\r\n    I:   { top: 34.7, left: 48.0, generic: false },\r\n    J:   { top: 55.6, left: 73.1, generic: false },\r\n    K:   { top: 54.4, left: 90.9, generic: false },\r\n    M:   { top: 35.5, left: 40.2, generic: false },\r\n    N:   { top: 70.7, left: 26.2, generic: false },\r\n    O:   { top: 81.0, left: 18.3, generic: false }\r\n  };\r\n\r\n  var ESPECIALES = [\"1\", \"N\", \"O\", \"M\"];\r\n\r\n  \/\/ ============================================================\r\n  \/\/ 2. ESTACIONAMIENTOS\r\n  \/\/ ============================================================\r\n  var ESTACIONAMIENTOS = {\r\n    P1: { top: 20.0, left: 22.3 },\r\n    P2: { top: 18.1, left: 72.4 }\r\n  };\r\n\r\n  var ZONA_EDIFICIO = {\r\n    A: \"P1\", B: \"P1\", C: \"P1\", D: \"P1\", E: \"P1\", F: \"P1\", G: \"P1\",\r\n    H: \"P1\", I: \"P1\", M: \"P1\", N: \"P1\", O: \"P1\",\r\n    J: \"P2\", K: \"P2\"\r\n  };\r\n\r\n  function zonaDe(id) {\r\n    if (id === \"1\") return \"ENTRADA\";\r\n    if (id === \"P1\" || id === \"P2\") return id;\r\n    return ZONA_EDIFICIO[id] || null;\r\n  }\r\n\r\n  \/\/ ============================================================\r\n  \/\/ 3. RUTAS VEHICULARES FIJAS\r\n  \/\/ ============================================================\r\n  var RUTAS_VEHICULARES = {\r\n    entrada_P1: [\r\n      { top: 20.2, left: 2.9 }, { top: 24, left: 4.7 }, { top: 29.1, left: 6.2 },\r\n      { top: 33.2, left: 6.9 }, { top: 38.5, left: 7.3 }, { top: 44.5, left: 8 },\r\n      { top: 50, left: 9.1 }, { top: 57.2, left: 11.4 }, { top: 63.1, left: 14 },\r\n      { top: 69.1, left: 18.6 }, { top: 71.6, left: 24 }, { top: 67.8, left: 30 },\r\n      { top: 61.5, left: 34 }, { top: 56.6, left: 40.6 }, { top: 53.1, left: 47 },\r\n      { top: 30.1, left: 45.6 }, { top: 29.1, left: 38.3 }, { top: 25, left: 29.9 },\r\n      ESTACIONAMIENTOS.P1\r\n    ],\r\n    entrada_P2: [\r\n      { top: 20.7, left: 3 }, { top: 26.4, left: 5.5 }, { top: 33.8, left: 7 },\r\n      { top: 40.2, left: 7.5 }, { top: 47.5, left: 8.5 }, { top: 52.1, left: 9.8 },\r\n      { top: 57.2, left: 11.4 }, { top: 63.1, left: 13.8 }, { top: 67.8, left: 17.5 },\r\n      { top: 70.8, left: 22.4 }, { top: 70.1, left: 27.4 }, { top: 66.3, left: 30.8 },\r\n      { top: 62.8, left: 33.6 }, { top: 58.4, left: 38.3 }, { top: 54.9, left: 43.7 },\r\n      { top: 52.7, left: 48.4 }, { top: 51.1, left: 51.4 }, { top: 49, left: 53.7 },\r\n      { top: 50, left: 57.1 }, { top: 53.7, left: 61.5 }, { top: 60, left: 65.7 },\r\n      { top: 68.6, left: 70 }, { top: 73.2, left: 74.7 }, { top: 73, left: 79.2 },\r\n      { top: 68.8, left: 82.7 }, { top: 64.1, left: 86.1 }, { top: 63.4, left: 90.2 },\r\n      { top: 66, left: 93.1 }, { top: 65, left: 95.2 }, { top: 59.3, left: 96.5 },\r\n      { top: 53.4, left: 97.1 }, { top: 46.5, left: 95.2 }, { top: 39.2, left: 91.2 },\r\n      { top: 29.1, left: 87.1 }, { top: 24, left: 86.6 }, { top: 10.2, left: 88.8 },\r\n      { top: 3.9, left: 85.5 }, { top: 9.5, left: 80.5 },\r\n      ESTACIONAMIENTOS.P2\r\n    ],\r\n    P1_entrada: [\r\n      ESTACIONAMIENTOS.P1,\r\n      { top: 19.6, left: 21.2 }, { top: 19.6, left: 17.7 }, { top: 23.7, left: 12.9 },\r\n      { top: 26.6, left: 9.7 }, { top: 23.7, left: 6 }, { top: 20.2, left: 2.9 }\r\n    ],\r\n    P2_entrada: [\r\n      ESTACIONAMIENTOS.P2,\r\n      { top: 15, left: 75.6 }, { top: 11.5, left: 78.9 }, { top: 7.9, left: 82.1 },\r\n      { top: 3.6, left: 85.6 }, { top: 10.6, left: 89 }, { top: 18, left: 87.2 },\r\n      { top: 26.4, left: 86.5 }, { top: 33.2, left: 88.5 }, { top: 40.5, left: 91.6 },\r\n      { top: 51.2, left: 97.1 }, { top: 60, left: 96.2 }, { top: 62.3, left: 93.4 },\r\n      { top: 63.5, left: 89.6 }, { top: 64.5, left: 86 }, { top: 69.2, left: 82.7 },\r\n      { top: 73.9, left: 78.1 }, { top: 73.2, left: 73.1 }, { top: 66.4, left: 68.8 },\r\n      { top: 58.8, left: 65.2 }, { top: 53.1, left: 61.2 }, { top: 49.9, left: 57 },\r\n      { top: 48.4, left: 52.9 }, { top: 51.9, left: 50.9 }, { top: 52.5, left: 47.1 },\r\n      { top: 29.7, left: 45.5 }, { top: 28.8, left: 40.1 }, { top: 27.5, left: 35.5 },\r\n      { top: 24.4, left: 29.6 }, { top: 20.9, left: 22.9 }, { top: 19.6, left: 18.3 },\r\n      { top: 21.3, left: 14.3 }, { top: 25, left: 11.3 }, { top: 26, left: 8.8 },\r\n      { top: 24, left: 5.7 }, { top: 19.4, left: 2.9 }\r\n    ],\r\n    P1_P2: [\r\n      ESTACIONAMIENTOS.P1,\r\n      { top: 19.4, left: 20.3 }, { top: 19.4, left: 18.7 }, { top: 19.7, left: 17.3 },\r\n      { top: 20.4, left: 15.8 }, { top: 21.5, left: 14.1 }, { top: 23.7, left: 12.4 },\r\n      { top: 25.4, left: 10.9 }, { top: 27, left: 9.4 }, { top: 29.2, left: 8.5 },\r\n      { top: 31.9, left: 7.7 }, { top: 35.5, left: 7.2 }, { top: 39.6, left: 7.4 },\r\n      { top: 42.9, left: 7.8 }, { top: 46.1, left: 8.4 }, { top: 49.6, left: 9.3 },\r\n      { top: 53.1, left: 10.2 }, { top: 56.6, left: 11.3 }, { top: 59.5, left: 12.4 },\r\n      { top: 62.8, left: 14 }, { top: 65.4, left: 15.7 }, { top: 67.6, left: 17.3 },\r\n      { top: 68.9, left: 18.7 }, { top: 70.4, left: 20.4 }, { top: 71, left: 22.3 },\r\n      { top: 71.1, left: 24.2 }, { top: 69.7, left: 27.6 }, { top: 67.6, left: 29.5 },\r\n      { top: 64.8, left: 31.4 }, { top: 62.8, left: 33.3 }, { top: 60.1, left: 35.8 },\r\n      { top: 58.5, left: 38.6 }, { top: 56.5, left: 41.3 }, { top: 52.7, left: 48.4 },\r\n      { top: 51.6, left: 50.4 }, { top: 50.2, left: 52 }, { top: 48.6, left: 53.8 },\r\n      { top: 49.6, left: 56.4 }, { top: 50.9, left: 58.3 }, { top: 53, left: 60.9 },\r\n      { top: 55.4, left: 62.9 }, { top: 57.5, left: 64.7 }, { top: 61.3, left: 66.9 },\r\n      { top: 64.8, left: 68.3 }, { top: 68.2, left: 69.9 }, { top: 71.3, left: 72 },\r\n      { top: 73, left: 74.2 }, { top: 74, left: 76.4 }, { top: 73.8, left: 78.7 },\r\n      { top: 71.9, left: 80.9 }, { top: 69.4, left: 82.6 }, { top: 66.7, left: 84.5 },\r\n      { top: 64.4, left: 86.7 }, { top: 63.8, left: 88.8 }, { top: 64.7, left: 90.6 },\r\n      { top: 65.1, left: 92.3 }, { top: 65.6, left: 94 }, { top: 64.8, left: 95 },\r\n      { top: 61.7, left: 95.8 }, { top: 57.2, left: 96.6 }, { top: 51.9, left: 97 },\r\n      { top: 48, left: 95.8 }, { top: 43.3, left: 93.3 }, { top: 35.1, left: 89.4 },\r\n      { top: 29.8, left: 86.9 }, { top: 26.2, left: 86.1 }, { top: 22.3, left: 86.4 },\r\n      { top: 18, left: 87.1 }, { top: 12.7, left: 88.1 }, { top: 9.3, left: 88.7 },\r\n      { top: 6.8, left: 87.2 }, { top: 3.7, left: 85.5 }, { top: 5.7, left: 83.7 },\r\n      { top: 8, left: 82.2 }, { top: 11.1, left: 79.2 }, { top: 13.3, left: 77.3 },\r\n      { top: 15, left: 75.4 },\r\n      ESTACIONAMIENTOS.P2\r\n    ],\r\n    P2_P1: [\r\n      ESTACIONAMIENTOS.P2,\r\n      { top: 16.6, left: 74 }, { top: 14.9, left: 75.6 }, { top: 13.3, left: 77.2 },\r\n      { top: 11.5, left: 78.9 }, { top: 9.3, left: 80.7 }, { top: 7.6, left: 82.1 },\r\n      { top: 5.7, left: 83.9 }, { top: 3.9, left: 85.5 }, { top: 6.2, left: 86.9 },\r\n      { top: 10, left: 88.9 }, { top: 13.6, left: 88.1 }, { top: 17.8, left: 87.2 },\r\n      { top: 22.1, left: 86.7 }, { top: 27, left: 86.4 }, { top: 30.8, left: 87.5 },\r\n      { top: 35.5, left: 89.5 }, { top: 41.4, left: 92.2 }, { top: 45.5, left: 94.6 },\r\n      { top: 50.8, left: 96.8 }, { top: 56.3, left: 96.8 }, { top: 60.6, left: 95.4 },\r\n      { top: 62.5, left: 93.3 }, { top: 63.2, left: 90.8 }, { top: 63.6, left: 87.7 },\r\n      { top: 65.7, left: 84.9 }, { top: 68.9, left: 82.7 }, { top: 72.1, left: 80.5 },\r\n      { top: 73.5, left: 77.9 }, { top: 73.2, left: 74.4 }, { top: 69.5, left: 70.4 },\r\n      { top: 64.8, left: 68.1 }, { top: 60.1, left: 65.9 }, { top: 55.2, left: 62.5 },\r\n      { top: 50.9, left: 58.9 }, { top: 48.9, left: 55.1 }, { top: 49, left: 52.9 },\r\n      { top: 51.6, left: 51 }, { top: 52.2, left: 48.6 }, { top: 53, left: 47 },\r\n      { top: 29.7, left: 45.5 }, { top: 29.4, left: 43 }, { top: 29.1, left: 40.7 },\r\n      { top: 28.8, left: 38.5 }, { top: 27.9, left: 36.3 }, { top: 27.2, left: 34.2 },\r\n      { top: 25.9, left: 31.8 }, { top: 24.3, left: 29.4 }, { top: 22.6, left: 26.6 },\r\n      { top: 20.9, left: 24.1 },\r\n      ESTACIONAMIENTOS.P1\r\n    ],\r\n\r\n    \/\/ ---- NUEVO: rutas directas del edificio J (estacionamiento p\u00fablico, sin tramo peatonal) ----\r\n    \/\/ J -> entrada (salir del edificio)\r\n    J_entrada: [\r\n      POSICIONES.J,\r\n      { top: 53, left: 70 }, { top: 61.6, left: 66.7 }, { top: 56.5, left: 63.5 },\r\n      { top: 52.4, left: 60.6 }, { top: 49.6, left: 57.2 }, { top: 48.4, left: 54.5 },\r\n      { top: 49.6, left: 52.1 }, { top: 51.8, left: 50.5 }, { top: 52.8, left: 47.2 },\r\n      { top: 29.2, left: 45.4 }, { top: 29.2, left: 42.4 }, { top: 28.8, left: 39.4 },\r\n      { top: 27.6, left: 35.9 }, { top: 25.3, left: 31.6 }, { top: 23.5, left: 28.3 },\r\n      { top: 20.6, left: 24.2 }, { top: 19.1, left: 20.7 }, { top: 20, left: 16.9 },\r\n      { top: 21.8, left: 14.4 }, { top: 24.7, left: 11.8 }, { top: 26, left: 9.4 },\r\n      { top: 24.7, left: 6.9 }, { top: 21.9, left: 4.8 }, { top: 20, left: 3 }\r\n    ],\r\n    \/\/ entrada -> J (mismo trazo, en reversa)\r\n    entrada_J: [\r\n      { top: 20, left: 3 }, { top: 21.9, left: 4.8 }, { top: 24.7, left: 6.9 },\r\n      { top: 26, left: 9.4 }, { top: 24.7, left: 11.8 }, { top: 21.8, left: 14.4 },\r\n      { top: 20, left: 16.9 }, { top: 19.1, left: 20.7 }, { top: 20.6, left: 24.2 },\r\n      { top: 23.5, left: 28.3 }, { top: 25.3, left: 31.6 }, { top: 27.6, left: 35.9 },\r\n      { top: 28.8, left: 39.4 }, { top: 29.2, left: 42.4 }, { top: 29.2, left: 45.4 },\r\n      { top: 52.8, left: 47.2 }, { top: 51.8, left: 50.5 }, { top: 49.6, left: 52.1 },\r\n      { top: 48.4, left: 54.5 }, { top: 49.6, left: 57.2 }, { top: 52.4, left: 60.6 },\r\n      { top: 56.5, left: 63.5 }, { top: 61.6, left: 66.7 }, { top: 53, left: 70 },\r\n      POSICIONES.J\r\n    ],\r\n    \/\/ J -> estacionamiento 1 (para llegar a cualquier otro edificio de la zona P1;\r\n    \/\/ de ah\u00ed se toma la ruta peatonal normal del estacionamiento 1)\r\n    J_P1: [\r\n      POSICIONES.J,\r\n      { top: 52.8, left: 70.5 }, { top: 61.5, left: 66.6 }, { top: 56.6, left: 63.5 },\r\n      { top: 52.5, left: 60.3 }, { top: 50.2, left: 57.2 }, { top: 48.7, left: 53.5 },\r\n      { top: 51.3, left: 51.1 }, { top: 52.7, left: 47.2 }, { top: 29.4, left: 45.4 },\r\n      { top: 28.8, left: 41.4 }, { top: 28.4, left: 38.6 }, { top: 27.5, left: 35.9 },\r\n      { top: 26.2, left: 33.5 }, { top: 24.4, left: 30 }, { top: 22.1, left: 26.2 },\r\n      ESTACIONAMIENTOS.P1\r\n    ],\r\n    \/\/ estacionamiento 1 -> J (se llega caminando al estacionamiento 1 y de ah\u00ed se maneja directo a J)\r\n    P1_J: [\r\n      ESTACIONAMIENTOS.P1,\r\n      { top: 19, left: 19.1 }, { top: 20.2, left: 15.7 }, { top: 22.6, left: 13.8 },\r\n      { top: 25.6, left: 11.1 }, { top: 29.5, left: 8.7 }, { top: 34.2, left: 7.2 },\r\n      { top: 41.4, left: 7.6 }, { top: 48.4, left: 8.8 }, { top: 54.3, left: 10.2 },\r\n      { top: 59.4, left: 12 }, { top: 63.6, left: 14.4 }, { top: 67.9, left: 17.7 },\r\n      { top: 70.4, left: 21.1 }, { top: 70.7, left: 24.4 }, { top: 68.9, left: 27.9 },\r\n      { top: 66.6, left: 30.4 }, { top: 62.8, left: 33 }, { top: 59.8, left: 36.2 },\r\n      { top: 57.8, left: 38.8 }, { top: 56.3, left: 41.7 }, { top: 54.3, left: 45 },\r\n      { top: 53, left: 47.5 }, { top: 51.8, left: 51 }, { top: 48.9, left: 52.8 },\r\n      { top: 49.6, left: 56.4 }, { top: 51.9, left: 59.4 }, { top: 53.7, left: 61.4 },\r\n      { top: 56.8, left: 64.1 }, { top: 61.9, left: 66.9 }, { top: 52.8, left: 69.5 },\r\n      POSICIONES.J\r\n    ]\r\n  };\r\n\r\n  \/\/ ============================================================\r\n  \/\/ 4. GRAFOS PEATONALES\r\n  \/\/ ============================================================\r\n  var GRAFOS_PEATONALES = {\r\n    P1: {\r\n      nodos: {\r\n        P1:  ESTACIONAMIENTOS.P1,\r\n        R2:  { top: 20.9, left: 19.1 }, R3:  { top: 22.5, left: 16 },\r\n        R4:  { top: 41.5, left: 16.3 }, R5:  { top: 41.1, left: 11 },\r\n        R6:  { top: 33.2, left: 11.2 }, R7:  { top: 26.4, left: 22.6 },\r\n        R8:  { top: 37.9, left: 23.1 }, R9:  { top: 37.3, left: 31.1 },\r\n        R10: { top: 39, left: 32 },     R11: { top: 40.2, left: 40.2 },\r\n        R12: { top: 35.5, left: 40.3 }, R13: { top: 40.4, left: 43 },\r\n        R14: { top: 45.8, left: 43.1 }, R16: { top: 44.8, left: 34.8 },\r\n        R17: { top: 46.5, left: 32.4 }, R18: { top: 47.5, left: 26.6 },\r\n        R19: { top: 47.7, left: 23.5 }, R20: { top: 54.7, left: 25.5 },\r\n        R21: { top: 65, left: 18.7 },   R22: { top: 66.6, left: 21.1 },\r\n        R23: { top: 64.2, left: 16.7 }, R24: { top: 61.5, left: 14.9 },\r\n        R25: { top: 57.9, left: 13.3 }, R26: { top: 23.5, left: 24.7 },\r\n        R27: { top: 25.4, left: 27.4 }, R28: { top: 27.2, left: 30 },\r\n        R29: { top: 28.6, left: 32.7 }, R30: { top: 30.4, left: 36.7 },\r\n        R31: { top: 31.4, left: 41.1 }, R32: { top: 31.3, left: 44.1 },\r\n        R33: { top: 30.8, left: 47.6 }, R34: { top: 31.1, left: 18.5 },\r\n        R35: { top: 41.8, left: 19.9 }\r\n      },\r\n      aristas: [\r\n        [\"P1\",\"R7\"], [\"P1\",\"R2\"], [\"R2\",\"R3\"], [\"R3\",\"R4\"], [\"R4\",\"R5\"], [\"R5\",\"R6\"],\r\n        [\"P1\",\"R26\"], [\"R26\",\"R27\"], [\"R27\",\"R28\"], [\"R28\",\"R29\"], [\"R29\",\"R30\"],\r\n        [\"R30\",\"R31\"], [\"R31\",\"R32\"], [\"R32\",\"R33\"], [\"R31\",\"R12\"],\r\n        [\"R7\",\"R8\"], [\"R8\",\"R19\"], [\"R8\",\"R9\"], [\"R9\",\"R10\"], [\"R10\",\"R11\"],\r\n        [\"R11\",\"R13\"], [\"R13\",\"R14\"], [\"R10\",\"R17\"], [\"R17\",\"R16\"], [\"R17\",\"R18\"],\r\n        [\"R19\",\"R20\"], [\"R20\",\"R21\"], [\"R21\",\"R22\"], [\"R21\",\"R23\"], [\"R23\",\"R24\"],\r\n        [\"R24\",\"R25\"], [\"R34\",\"R7\"], [\"R3\",\"R8\"], [\"R35\",\"R4\"]\r\n      ]\r\n    },\r\n    P2: {\r\n      nodos: {\r\n        P2: ESTACIONAMIENTOS.P2,\r\n        R2:  { top: 34.8, left: 72.4 }, R3:  { top: 55.4, left: 74.9 },\r\n        R4:  { top: 52.1, left: 85.1 }, R5:  { top: 28.9, left: 60.5 },\r\n        R6:  { top: 39.9, left: 62.5 }, R7:  { top: 61.2, left: 88.3 },\r\n        R8:  { top: 60.9, left: 90.9 }, R9:  { top: 60.7, left: 93.4 },\r\n        R10: { top: 58.4, left: 95 },   R11: { top: 54.9, left: 95.7 },\r\n        R12: { top: 51.5, left: 95.3 }, R13: { top: 54.3, left: 91.2 }\r\n      },\r\n      aristas: [\r\n        [\"P2\",\"R2\"], [\"R2\",\"R6\"], [\"R6\",\"R5\"], [\"R2\",\"R3\"], [\"R3\",\"R4\"], [\"R4\",\"R7\"],\r\n        [\"R7\",\"R8\"], [\"R8\",\"R9\"], [\"R9\",\"R10\"], [\"R10\",\"R11\"], [\"R11\",\"R12\"], [\"R12\",\"R13\"]\r\n      ]\r\n    }\r\n  };\r\n\r\n  var METROS_POR_PORCENTAJE = 5;\r\n\r\n  function distPct(p1, p2) {\r\n    var dx = p1.left - p2.left, dy = p1.top - p2.top;\r\n    return Math.sqrt(dx * dx + dy * dy);\r\n  }\r\n\r\n  \/\/ ============================================================\r\n  \/\/ 5. DIJKSTRA gen\u00e9rico + construcci\u00f3n de grafo POR ZONA\r\n  \/\/ ============================================================\r\n  function construirGrafoZona(zona) {\r\n    var grafoBase = GRAFOS_PEATONALES[zona];\r\n    var adj = {};\r\n    function addEdge(a, b, w) {\r\n      adj[a] = adj[a] || []; adj[b] = adj[b] || [];\r\n      adj[a].push({ to: b, w: w }); adj[b].push({ to: a, w: w });\r\n    }\r\n    grafoBase.aristas.forEach(function (a) {\r\n      var n1 = grafoBase.nodos[a[0]], n2 = grafoBase.nodos[a[1]];\r\n      if (n1 && n2) addEdge(a[0], a[1], distPct(n1, n2));\r\n    });\r\n    Object.keys(ZONA_EDIFICIO).forEach(function (idEdif) {\r\n      if (ZONA_EDIFICIO[idEdif] !== zona) return;\r\n      var pe = POSICIONES[idEdif];\r\n      var mejor = null, mejorD = Infinity;\r\n      Object.keys(grafoBase.nodos).forEach(function (idNodo) {\r\n        var d = distPct(pe, grafoBase.nodos[idNodo]);\r\n        if (d < mejorD) { mejorD = d; mejor = idNodo; }\r\n      });\r\n      if (mejor) addEdge(idEdif, mejor, mejorD);\r\n    });\r\n    return adj;\r\n  }\r\n\r\n  function coordDeZona(zona, id) {\r\n    if (GRAFOS_PEATONALES[zona].nodos[id]) return GRAFOS_PEATONALES[zona].nodos[id];\r\n    if (POSICIONES[id]) return POSICIONES[id];\r\n    return null;\r\n  }\r\n\r\n  function dijkstra(adj, inicio, fin) {\r\n    var dist = {}, prev = {}, visitado = {};\r\n    Object.keys(adj).forEach(function (k) { dist[k] = Infinity; });\r\n    dist[inicio] = 0;\r\n    var cola = [[0, inicio]];\r\n    while (cola.length) {\r\n      cola.sort(function (a, b) { return a[0] - b[0]; });\r\n      var actual = cola.shift();\r\n      var u = actual[1];\r\n      if (visitado[u]) continue;\r\n      visitado[u] = true;\r\n      if (u === fin) break;\r\n      (adj[u] || []).forEach(function (arista) {\r\n        var nd = actual[0] + arista.w;\r\n        if (nd < dist[arista.to]) {\r\n          dist[arista.to] = nd; prev[arista.to] = u; cola.push([nd, arista.to]);\r\n        }\r\n      });\r\n    }\r\n    if (dist[fin] === undefined || dist[fin] === Infinity) return null;\r\n    var camino = []; var cur = fin;\r\n    while (cur !== undefined) {\r\n      camino.unshift(cur);\r\n      if (cur === inicio) break;\r\n      cur = prev[cur];\r\n    }\r\n    return { camino: camino, distancia: dist[fin] };\r\n  }\r\n\r\n  function rutaPeatonal(zona, origenId, destinoId) {\r\n    var adj = construirGrafoZona(zona);\r\n    var res = dijkstra(adj, origenId, destinoId);\r\n    if (!res) return null;\r\n    var puntos = res.camino.map(function (id) { return coordDeZona(zona, id); }).filter(Boolean);\r\n    return { tipo: \"peatonal\", puntos: puntos, distancia: res.distancia };\r\n  }\r\n\r\n  function distanciaTramo(puntos) {\r\n    var total = 0;\r\n    for (var i = 1; i < puntos.length; i++) total += distPct(puntos[i - 1], puntos[i]);\r\n    return total;\r\n  }\r\n\r\n  function rutaVehicular(clave) {\r\n    var puntos = RUTAS_VEHICULARES[clave];\r\n    if (!puntos) return null;\r\n    return { tipo: \"vehicular\", puntos: puntos, distancia: distanciaTramo(puntos) };\r\n  }\r\n\r\n  \/\/ ============================================================\r\n  \/\/ 6. RUTA COMPLETA\r\n  \/\/ ============================================================\r\n  function calcularRutaCompleta(origenId, destinoId) {\r\n    if (!origenId || !destinoId || origenId === destinoId) return null;\r\n    var zonaO = zonaDe(origenId), zonaD = zonaDe(destinoId);\r\n    if (!zonaO || !zonaD) return null;\r\n\r\n    var tramos = [];\r\n\r\n    \/\/ EXCEPCI\u00d3N: el estacionamiento del edificio J es p\u00fablico y est\u00e1 justo en\r\n    \/\/ la puerta, as\u00ed que no lleva tramo peatonal: se va directo en coche.\r\n    if (destinoId === \"J\" && zonaO === \"ENTRADA\") {\r\n      tramos.push(rutaVehicular(\"entrada_J\"));\r\n    } else if (origenId === \"J\" && zonaD === \"ENTRADA\") {\r\n      tramos.push(rutaVehicular(\"J_entrada\"));\r\n    } else if (destinoId === \"J\" && zonaO === \"P1\") {\r\n      tramos.push(rutaPeatonal(\"P1\", origenId, \"P1\"));\r\n      tramos.push(rutaVehicular(\"P1_J\"));\r\n    } else if (origenId === \"J\" && zonaD === \"P1\") {\r\n      tramos.push(rutaVehicular(\"J_P1\"));\r\n      tramos.push(rutaPeatonal(\"P1\", \"P1\", destinoId));\r\n    } else if (zonaO === \"ENTRADA\" && zonaD !== \"ENTRADA\") {\r\n      tramos.push(rutaVehicular(\"entrada_\" + zonaD));\r\n      tramos.push(rutaPeatonal(zonaD, zonaD, destinoId));\r\n    } else if (zonaD === \"ENTRADA\" && zonaO !== \"ENTRADA\") {\r\n      tramos.push(rutaPeatonal(zonaO, origenId, zonaO));\r\n      tramos.push(rutaVehicular(zonaO + \"_entrada\"));\r\n    } else if (zonaO === zonaD && zonaO !== \"ENTRADA\") {\r\n      tramos.push(rutaPeatonal(zonaO, origenId, destinoId));\r\n    } else if (zonaO !== zonaD) {\r\n      var claveDirecta = zonaO + \"_\" + zonaD;\r\n      if (RUTAS_VEHICULARES[claveDirecta]) {\r\n        tramos.push(rutaPeatonal(zonaO, origenId, zonaO));\r\n        tramos.push(rutaVehicular(claveDirecta));\r\n        tramos.push(rutaPeatonal(zonaD, zonaD, destinoId));\r\n      } else {\r\n        tramos.push(rutaPeatonal(zonaO, origenId, zonaO));\r\n        tramos.push(rutaVehicular(zonaO + \"_entrada\"));\r\n        tramos.push(rutaVehicular(\"entrada_\" + zonaD));\r\n        tramos.push(rutaPeatonal(zonaD, zonaD, destinoId));\r\n      }\r\n    } else {\r\n      return null;\r\n    }\r\n\r\n    if (tramos.some(function (t) { return !t; })) return null;\r\n    return tramos;\r\n  }\r\n\r\n  \/\/ ============================================================\r\n  \/\/ 7. DIBUJO EN PANTALLA (con animaci\u00f3n de trazo + glow + flujo)\r\n  \/\/ ============================================================\r\n  var container = document.getElementById(\"contenedor-mapa-veh\");\r\n  var svgRutas = document.getElementById(\"svg-ruta-veh\");\r\n  var overlayPeatonal = document.getElementById(\"overlay-solo-peatonal-veh\");\r\n  var tramosActuales = null;\r\n\r\n  function redibujarSvg() {\r\n    var ns = \"http:\/\/www.w3.org\/2000\/svg\";\r\n    Array.prototype.slice.call(svgRutas.querySelectorAll(\"polyline, line\")).forEach(function (el) { el.remove(); });\r\n\r\n    if (!tramosActuales) return;\r\n\r\n    tramosActuales.forEach(function (tramo) {\r\n      var puntosStr = tramo.puntos.map(function (p) { return p.left + \",\" + p.top; }).join(\" \");\r\n      var esVehicular = tramo.tipo === \"vehicular\";\r\n      var color = esVehicular ? \"#7AABBE\" : \"#16a37e\";\r\n      var grosor = esVehicular ? 4.5 : 6;\r\n\r\n      \/\/ Halo\/glow debajo\r\n      var glow = document.createElementNS(ns, \"polyline\");\r\n      glow.setAttribute(\"points\", puntosStr);\r\n      glow.setAttribute(\"class\", \"ruta-glow-veh\");\r\n      glow.setAttribute(\"stroke\", color);\r\n      glow.setAttribute(\"stroke-width\", (grosor + 2).toString());\r\n      svgRutas.appendChild(glow);\r\n\r\n      \/\/ L\u00ednea principal\r\n      var poly = document.createElementNS(ns, \"polyline\");\r\n      poly.setAttribute(\"points\", puntosStr);\r\n      poly.setAttribute(\"fill\", \"none\");\r\n      poly.setAttribute(\"stroke\", color);\r\n      poly.setAttribute(\"stroke-width\", grosor.toString());\r\n      poly.setAttribute(\"stroke-linecap\", \"round\");\r\n      poly.setAttribute(\"stroke-linejoin\", \"round\");\r\n      poly.setAttribute(\"vector-effect\", \"non-scaling-stroke\");\r\n      svgRutas.appendChild(poly);\r\n\r\n      var len = poly.getTotalLength();\r\n      if (!len || !isFinite(len)) {\r\n        return;\r\n      }\r\n\r\n      poly.style.strokeDasharray = len;\r\n      glow.style.strokeDasharray = len;\r\n      poly.style.strokeDashoffset = len;\r\n      glow.style.strokeDashoffset = len;\r\n\r\n      var duracionMs = Math.min(1600, Math.max(500, len * 12));\r\n      var inicio = null;\r\n\r\n      function paso(timestamp) {\r\n        if (!inicio) inicio = timestamp;\r\n        var progreso = Math.min(1, (timestamp - inicio) \/ duracionMs);\r\n        var facilitado = 1 - Math.pow(1 - progreso, 3); \/\/ ease-out cubic\r\n        var offset = len * (1 - facilitado);\r\n        poly.style.strokeDashoffset = offset;\r\n        glow.style.strokeDashoffset = offset;\r\n        if (progreso < 1) {\r\n          requestAnimationFrame(paso);\r\n        } else {\r\n          poly.style.strokeDasharray = \"2 8\";\r\n          glow.style.strokeDasharray = \"2 8\";\r\n          poly.style.strokeDashoffset = \"0\";\r\n          glow.style.strokeDashoffset = \"0\";\r\n          poly.classList.add(\"ruta-flujo-veh\");\r\n        }\r\n      }\r\n      requestAnimationFrame(paso);\r\n    });\r\n  }\r\n\r\n  function actualizarOverlayPeatonal(tramos) {\r\n    if (!overlayPeatonal) return;\r\n    var soloPeatonal = !!tramos && tramos.length > 0 &&\r\n      tramos.every(function (t) { return t.tipo === \"peatonal\"; });\r\n    overlayPeatonal.classList.toggle(\"activo-overlay-veh\", soloPeatonal);\r\n\r\n    \/\/ Oculta el \"usted est\u00e1 aqu\u00ed\" mientras se muestra el overlay de \"puede llegar caminando\"\r\n    var marcadorUA = document.getElementById(\"usted-aqui-marcador-veh\");\r\n    if (marcadorUA) {\r\n      marcadorUA.style.setProperty(\"display\", soloPeatonal ? \"none\" : \"flex\", \"important\");\r\n    }\r\n  }\r\n\r\n  function dibujarRutaCompleta(origenId, destinoId) {\r\n    var tramos = calcularRutaCompleta(origenId, destinoId);\r\n    tramosActuales = tramos;\r\n    redibujarSvg();\r\n    actualizarOverlayPeatonal(tramos);\r\n    if (!tramos) return null;\r\n\r\n    var distVehicular = 0, distPeatonal = 0;\r\n    tramos.forEach(function (t) {\r\n      if (t.tipo === \"vehicular\") distVehicular += t.distancia;\r\n      else distPeatonal += t.distancia;\r\n    });\r\n    var metrosVeh = Math.round(distVehicular * METROS_POR_PORCENTAJE);\r\n    var metrosPie = Math.round(distPeatonal * METROS_POR_PORCENTAJE);\r\n    var texto;\r\n    if (distVehicular > 0 && distPeatonal > 0) {\r\n      texto = metrosVeh + \" m en auto + \" + metrosPie + \" m caminando\";\r\n    } else if (distVehicular > 0) {\r\n      texto = metrosVeh + \" m en auto\";\r\n    } else {\r\n      texto = metrosPie + \" m caminando\";\r\n    }\r\n    return { distanciaTexto: texto, tramos: tramos };\r\n  }\r\n\r\n  window.QuantumMapa.dibujarRuta = dibujarRutaCompleta;\r\n\r\n  \/\/ ============================================================\r\n  \/\/ 8. BOTONES DE EDIFICIOS (con aparici\u00f3n escalonada)\r\n  \/\/ ============================================================\r\n  function crearBotones() {\r\n    var indice = 0;\r\n    Object.keys(POSICIONES).forEach(function (id) {\r\n      var pos = POSICIONES[id];\r\n      var btn = document.createElement(\"button\");\r\n      var cls = \"punto-mapa-veh\";\r\n      if (pos.generic) cls += \" punto-generico-veh\";\r\n      else if (ESPECIALES.indexOf(id) !== -1) cls += \" punto-especial-veh\";\r\n      btn.className = cls;\r\n      btn.style.top = pos.top + \"%\";\r\n      btn.style.left = pos.left + \"%\";\r\n      btn.style.setProperty(\"--retraso\", (0.15 + indice * 0.025) + \"s\");\r\n      btn.dataset.id = id;\r\n      btn.textContent = id.replace(\/[0-9]\/g, \"\") || id;\r\n      container.appendChild(btn);\r\n      indice++;\r\n\r\n      btn.addEventListener(\"click\", function () { return; });\r\n    });\r\n  }\r\n  crearBotones();\r\n\r\n  \/\/ ============================================================\r\n  \/\/ 9. \u00cdCONOS DE ESTACIONAMIENTO\r\n  \/\/ ============================================================\r\n  function crearIconosEstacionamiento() {\r\n    [\"P1\", \"P2\"].forEach(function (id) {\r\n      var pos = ESTACIONAMIENTOS[id];\r\n      var div = document.createElement(\"div\");\r\n      div.className = \"icono-estacionamiento-veh\";\r\n      div.style.top = pos.top + \"%\";\r\n      div.style.left = pos.left + \"%\";\r\n      div.title = \"Estacionamiento \" + id.slice(1);\r\n      var img = document.createElement(\"img\");\r\n      img.src = \"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/icono_carro.png\";\r\n      img.alt = \"Estacionamiento \" + id.slice(1);\r\n      div.appendChild(img);\r\n      container.appendChild(div);\r\n    });\r\n  }\r\n  crearIconosEstacionamiento();\r\n\r\n  \/\/ ============================================================\r\n  \/\/ 10. \"USTED EST\u00c1 AQU\u00cd\" y bot\u00f3n de cambiar destino\r\n  \/\/ ============================================================\r\n  window.QuantumMapa.pintarUstedAquiMapa = function (idForzado) {\r\n    var id = idForzado || window.QuantumMapa.puntoPartida;\r\n    var pos = POSICIONES[id];\r\n    if (!pos) return;\r\n    var previo = document.getElementById(\"usted-aqui-marcador-veh\");\r\n    if (previo) previo.remove();\r\n    var marcador = document.createElement(\"div\");\r\n    marcador.id = \"usted-aqui-marcador-veh\";\r\n    marcador.className = \"usted-aqui-veh\";\r\n    marcador.style.top = pos.top + \"%\";\r\n    marcador.style.left = pos.left + \"%\";\r\n    marcador.innerHTML =\r\n      '<span class=\"usted-aqui-veh-etiqueta\">Usted est\u00e1 aqu\u00ed<\/span>' +\r\n      '<span class=\"usted-aqui-veh-pin\"><\/span>';\r\n    container.appendChild(marcador);\r\n\r\n    \/\/ Si el overlay peatonal ya est\u00e1 activo, oc\u00faltalo de una vez\r\n    if (overlayPeatonal && overlayPeatonal.classList.contains(\"activo-overlay-veh\")) {\r\n      marcador.style.setProperty(\"display\", \"none\", \"important\");\r\n    }\r\n  };\r\n\r\n  document.getElementById(\"btn-cambiar-partida-veh\").addEventListener(\"click\", function () {\r\n    var secDestino = document.getElementById(\"seccion-destino\");\r\n    var secRutas = document.getElementById(\"seccion-rutas\");\r\n    if (secRutas) secRutas.style.setProperty(\"display\", \"none\", \"important\");\r\n    if (secDestino) secDestino.style.setProperty(\"display\", \"block\", \"important\");\r\n\r\n    tramosActuales = null;\r\n    redibujarSvg();\r\n    actualizarOverlayPeatonal(null);\r\n    window.QuantumMapa.puntoDestino = null;\r\n  });\r\n\r\n  document.addEventListener(\"puntoDestinoSeleccionado\", function (e) {\r\n    var destinoId = e.detail.id;\r\n    if (window.QuantumMapa.puntoPartida) {\r\n      dibujarRutaCompleta(window.QuantumMapa.puntoPartida, destinoId);\r\n    }\r\n    if (typeof window.QuantumMapa.pintarUstedAquiMapa === \"function\") {\r\n      window.QuantumMapa.pintarUstedAquiMapa();\r\n    }\r\n  });\r\n\r\n  if (window.QuantumMapa.puntoPartida) {\r\n    window.QuantumMapa.pintarUstedAquiMapa(window.QuantumMapa.puntoPartida);\r\n  }\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e70ca22 e-con-full e-flex e-con e-child\" data-id=\"e70ca22\" data-element_type=\"container\" id=\"mapa3d\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ff049bc elementor-widget elementor-widget-html\" data-id=\"ff049bc\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"contenedor-mapa-3d\" id=\"contenedor-3d\">\r\n  <img decoding=\"async\" src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/3D-1.png\" alt=\"Mapa 3D\" class=\"imagen-mapa-fondo\" \/>\r\n  <div class=\"ui-flotante-der\">\r\n    <button class=\"btn-mockup\" id=\"btn-2d-2\" style=\"background: #a4b4b8;\">\r\n      <img decoding=\"async\" src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/2D_G.png\" alt=\"Regresar a 2D\" \/>\r\n    <\/button>\r\n    <button class=\"btn-mockup\" id=\"btn-3d-2\" style=\"background: #3c6e64;\" disabled>\r\n      <img decoding=\"async\" src=\"https:\/\/quantum.gob.mx\/wp-content\/uploads\/2026\/08\/3D_V.png\" alt=\"3D\" \/>\r\n    <\/button>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  .contenedor-mapa-3d {\r\n    position: relative;\r\n    width: 100%;\r\n  }\r\n  .imagen-mapa-fondo {\r\n    width: 100%;\r\n    height: auto;\r\n    display: block;\r\n  }\r\n  .ui-flotante-der {\r\n    position: absolute;\r\n    bottom: 30px;\r\n    right: 30px;\r\n    z-index: 10;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n  }\r\n  .btn-mockup {\r\n    width: 45px;\r\n    height: 45px;\r\n    border: none;\r\n    border-radius: 4px;\r\n    padding: 5px;\r\n    cursor: pointer;\r\n    box-shadow: 0 4px 6px rgba(0,0,0,0.2);\r\n    transition: transform 0.2s ease;\r\n  }\r\n  .btn-mockup img {\r\n    width: 100%;\r\n    height: 100%;\r\n    object-fit: contain;\r\n  }\r\n  .btn-mockup:hover {\r\n    transform: scale(1.05);\r\n  }\r\n  .btn-mockup[disabled] {\r\n    cursor: default;\r\n  }\r\n  .btn-mockup[disabled]:hover {\r\n    transform: none;\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n(function () {\r\n  var btn2d = document.getElementById('btn-2d-2');\r\n  if (!btn2d) return;\r\n\r\n  btn2d.addEventListener('click', function () {\r\n    var elMapa2d = document.getElementById('mapa2d');\r\n    var elMapa3d = document.getElementById('mapa3d');\r\n    if (elMapa2d) elMapa2d.style.setProperty('display', 'block', 'important');\r\n    if (elMapa3d) elMapa3d.style.setProperty('display', 'none', 'important');\r\n  });\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5b34317 e-flex e-con-boxed e-con e-parent\" data-id=\"5b34317\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-4de28fc e-con-full e-flex e-con e-child\" data-id=\"4de28fc\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-58cd6ee elementor-widget elementor-widget-html\" data-id=\"58cd6ee\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\n.aviso-girar-pantalla {\n  display: none !important;\n}\n\n\n@media screen and (max-width: 1024px) and (orientation: portrait) {\n  .aviso-girar-pantalla {\n    display: flex !important;\n    position: fixed !important;\n    top: 0;\n    left: 0;\n    width: 100vw;\n    height: 100vh;\n    z-index: 999999; \n    justify-content: center;\n    align-items: center;\n    text-align: center;\n  }\n  \n\n  body {\n    overflow: hidden !important;\n  }\n}\n\n\n@media screen and (max-width: 1024px) and (orientation: landscape) {\n  .aviso-girar-pantalla {\n    display: none !important; \n  }\n}\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cef7e88 elementor-widget elementor-widget-html\" data-id=\"cef7e88\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n.cuadro-cortado {\n \n    clip-path: polygon(\n        30px 0,                 \/* Corte sup-izq *\/\n        100% 0,                 \/* Esquina sup-der *\/\n        100% calc(100% - 30px), \/* Corte inf-der *\/\n        calc(100% - 30px) 100%, \/*  Fin corte inf-der *\/\n        0 100%,                 \/* Esquina inf-izq *\/\n        0 30px                  \/* Fin corte sup-izq *\/\n    );\n    \n    display: inline-block;\n    width: fit-content;       \n    padding: 15px 44px;     \n    text-align: center;\n}\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-216a3be elementor-widget elementor-widget-html\" data-id=\"216a3be\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<script>\r\ndocument.addEventListener(\"DOMContentLoaded\", function() {\r\n  var boton = document.getElementById(\"btn-empezar\");\r\n  var bienvenida = document.getElementById(\"seccion-bienvenida\");\r\n  var partida = document.getElementById(\"seccion-partida\");\r\n\r\n  if (boton) {\r\n    boton.addEventListener(\"click\", function(e) {\r\n      e.preventDefault();\r\n      \r\n      if (bienvenida) {\r\n        bienvenida.style.setProperty(\"display\", \"none\", \"important\");\r\n      }\r\n      \r\n     \r\n      if (partida) {\r\n        partida.style.setProperty(\"display\", \"flex\", \"important\");\r\n      }\r\n    });\r\n  }\r\n});\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-56760c0 elementor-widget elementor-widget-html\" data-id=\"56760c0\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n  #seccion-partida {\r\n    display: none !important;\r\n  }\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c9d0b2b elementor-widget elementor-widget-html\" data-id=\"c9d0b2b\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n #seccion-destino {\r\n    display: none !important;\r\n  }\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fb6dcfd elementor-widget elementor-widget-html\" data-id=\"fb6dcfd\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n  #mapa3d {\r\n    display: none !important;\r\n  }\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3419839 elementor-widget elementor-widget-html\" data-id=\"3419839\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n #seccion-rutas {\r\n    display: none !important;\r\n  }\r\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>\u00a1bIENVENIDo A QUANTUM! \u00bfEst\u00e1s explorando el lugar? Para darte la ruta exacta a tu edificio, selecciona en qu\u00e9 punto te encuentras en [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-templates\/page_fullwidth.php","meta":{"_kadence_starter_templates_imported_post":false,"footnotes":""},"class_list":["post-1109","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/quantum.gob.mx\/en\/wp-json\/wp\/v2\/pages\/1109","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/quantum.gob.mx\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/quantum.gob.mx\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/quantum.gob.mx\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/quantum.gob.mx\/en\/wp-json\/wp\/v2\/comments?post=1109"}],"version-history":[{"count":68,"href":"https:\/\/quantum.gob.mx\/en\/wp-json\/wp\/v2\/pages\/1109\/revisions"}],"predecessor-version":[{"id":1339,"href":"https:\/\/quantum.gob.mx\/en\/wp-json\/wp\/v2\/pages\/1109\/revisions\/1339"}],"wp:attachment":[{"href":"https:\/\/quantum.gob.mx\/en\/wp-json\/wp\/v2\/media?parent=1109"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}