{"id":760,"date":"2026-06-02T21:35:49","date_gmt":"2026-06-02T21:35:49","guid":{"rendered":"https:\/\/ccmexico.com.mx\/turismo\/?page_id=760"},"modified":"2026-06-25T19:28:13","modified_gmt":"2026-06-25T19:28:13","slug":"convenios-con-hoteles-internacionales","status":"publish","type":"page","link":"https:\/\/ccmexico.com.mx\/turismo\/convenios-con-hoteles-internacionales\/","title":{"rendered":"CONVENIOS CON HOTELES INTERNACIONALES"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"760\" class=\"elementor elementor-760\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0cfe6b3 e-flex e-con-boxed e-con e-parent\" data-id=\"0cfe6b3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b0897ae elementor-widget elementor-widget-heading\" data-id=\"b0897ae\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">CONVENIOS CON HOTELES NACIONALES<\/h2>\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-d72ae15 e-flex e-con-boxed e-con e-parent\" data-id=\"d72ae15\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fcba3bc elementor-widget elementor-widget-html\" data-id=\"fcba3bc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"es\">\r\n<head>\r\n<meta charset=\"UTF-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n<title>Convenios Hoteles M\u00e9xico 2026<\/title>\r\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/leaflet\/1.9.4\/leaflet.min.css\"\/>\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/leaflet\/1.9.4\/leaflet.min.js\"><\/script>\r\n<style>\r\n  @import url('https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@300;400;500;600;700&family=Playfair+Display:wght@600;700&display=swap');\r\n\r\n  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\r\n\r\n  :root {\r\n    --navy: #0f1f3d;\r\n    --gold: #c9973a;\r\n    --gold-light: #e8c07a;\r\n    --cream: #f8f5ef;\r\n    --white: #ffffff;\r\n    --text: #1a1a2e;\r\n    --text-muted: #6b7280;\r\n    --border: #e2d9cc;\r\n    --panel-bg: #fafaf8;\r\n    --hover: #f0ebe2;\r\n    --active: #eee5d3;\r\n    --radius: 6px;\r\n  }\r\n\r\n  html, body {\r\n    height: 100%;\r\n    font-family: 'Inter', sans-serif;\r\n    color: var(--text);\r\n  }\r\n\r\n  \/* \u2500\u2500 DESKTOP LAYOUT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  .app {\r\n    display: flex;\r\n    height: calc(100vh - 62px);\r\n    margin-top: 62px;\r\n  }\r\n\r\n  \/* \u2500\u2500 LEFT PANEL \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  .panel {\r\n    width: 360px;\r\n    min-width: 260px;\r\n    max-width: 420px;\r\n    background: var(--panel-bg);\r\n    border-right: 1px solid var(--border);\r\n    display: flex;\r\n    flex-direction: column;\r\n    overflow: hidden;\r\n  }\r\n\r\n  .panel-top {\r\n    padding: 16px 16px 12px;\r\n    border-bottom: 1px solid var(--border);\r\n    background: var(--white);\r\n  }\r\n\r\n  .search-box {\r\n    position: relative;\r\n  }\r\n\r\n  .search-box input {\r\n    width: 100%;\r\n    padding: 9px 12px 9px 36px;\r\n    border: 1.5px solid var(--border);\r\n    border-radius: var(--radius);\r\n    font-size: .87rem;\r\n    font-family: inherit;\r\n    background: var(--cream);\r\n    color: var(--text);\r\n    transition: border-color .2s;\r\n    outline: none;\r\n  }\r\n\r\n  .search-box input:focus { border-color: var(--gold); background: var(--white); }\r\n\r\n  .search-box .ico {\r\n    position: absolute;\r\n    left: 10px; top: 50%;\r\n    transform: translateY(-50%);\r\n    color: var(--text-muted);\r\n    font-size: 14px;\r\n    pointer-events: none;\r\n  }\r\n\r\n  .country-count {\r\n    font-size: .72rem;\r\n    color: var(--text-muted);\r\n    margin-top: 8px;\r\n    text-align: right;\r\n  }\r\n\r\n  .countries-list {\r\n    flex: 1;\r\n    overflow-y: auto;\r\n    padding: 8px 0;\r\n  }\r\n\r\n  .countries-list::-webkit-scrollbar { width: 5px; }\r\n  .countries-list::-webkit-scrollbar-track { background: transparent; }\r\n  .countries-list::-webkit-scrollbar-thumb { background: var(--border); border-radius: 10px; }\r\n\r\n  .country-item {\r\n    border-bottom: 1px solid var(--border);\r\n  }\r\n\r\n  .country-btn {\r\n    width: 100%;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 10px;\r\n    padding: 11px 16px;\r\n    background: none;\r\n    border: none;\r\n    cursor: pointer;\r\n    text-align: left;\r\n    font-family: inherit;\r\n    transition: background .15s;\r\n  }\r\n\r\n  .country-btn:hover { background: var(--hover); }\r\n  .country-btn.active { background: var(--active); }\r\n  .country-btn.selected { background: #e8c07a22; border-left: 3px solid var(--gold); }\r\n\r\n  .country-flag {\r\n    font-size: 1.3rem;\r\n    line-height: 1;\r\n    flex-shrink: 0;\r\n  }\r\n\r\n  .country-info { flex: 1; min-width: 0; }\r\n\r\n  .country-name {\r\n    font-size: .88rem;\r\n    font-weight: 600;\r\n    color: var(--text);\r\n    white-space: nowrap;\r\n    overflow: hidden;\r\n    text-overflow: ellipsis;\r\n  }\r\n\r\n  .hotel-count {\r\n    font-size: .72rem;\r\n    color: var(--text-muted);\r\n  }\r\n\r\n  .chevron {\r\n    color: var(--text-muted);\r\n    font-size: .65rem;\r\n    transition: transform .2s;\r\n    flex-shrink: 0;\r\n  }\r\n\r\n  .country-btn.open .chevron { transform: rotate(90deg); }\r\n\r\n  .hotels-sub {\r\n    display: none;\r\n    background: var(--white);\r\n    border-top: 1px solid var(--border);\r\n  }\r\n\r\n  .hotels-sub.open { display: block; }\r\n\r\n  .hotel-item {\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 8px;\r\n    padding: 7px 16px 7px 42px;\r\n    font-size: .81rem;\r\n    color: #374151;\r\n    border-bottom: 1px solid #f3ede4;\r\n    cursor: pointer;\r\n    transition: background .12s;\r\n  }\r\n\r\n  .hotel-item:last-child { border-bottom: none; }\r\n  .hotel-item:hover { background: var(--hover); color: var(--navy); }\r\n\r\n  .hotel-item::before {\r\n    content: '\ud83c\udfe8';\r\n    font-size: .8rem;\r\n    flex-shrink: 0;\r\n  }\r\n\r\n  \/* \u2500\u2500 MAP \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  .map-wrap {\r\n    flex: 1;\r\n    position: relative;\r\n    overflow: hidden;\r\n  }\r\n\r\n  #map {\r\n    width: 100%;\r\n    height: 100%;\r\n  }\r\n\r\n  .map-overlay {\r\n    position: absolute;\r\n    top: 12px; right: 12px;\r\n    background: rgba(255,255,255,.95);\r\n    border-radius: var(--radius);\r\n    padding: 10px 14px;\r\n    font-size: .78rem;\r\n    color: var(--text-muted);\r\n    pointer-events: none;\r\n    z-index: 500;\r\n    box-shadow: 0 2px 8px rgba(0,0,0,.12);\r\n    backdrop-filter: blur(4px);\r\n  }\r\n\r\n  \/* \u2500\u2500 MOBILE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\r\n  @media (max-width: 768px) {\r\n    header h1 { font-size: 1rem; }\r\n    .header-stats { display: none; }\r\n\r\n    .app {\r\n      flex-direction: column;\r\n    }\r\n\r\n    .panel {\r\n      width: 100%;\r\n      max-width: 100%;\r\n      height: 100%;\r\n      border-right: none;\r\n    }\r\n\r\n    .map-wrap {\r\n      display: none;\r\n    }\r\n\r\n    \/* Mobile accordion style *\/\r\n    .country-btn {\r\n      padding: 14px 16px;\r\n    }\r\n\r\n    .country-name { font-size: .92rem; }\r\n\r\n    .hotel-item {\r\n      padding: 10px 16px 10px 46px;\r\n      font-size: .84rem;\r\n    }\r\n  }\r\n\r\n  \/* Leaflet popup custom *\/\r\n  .leaflet-popup-content-wrapper {\r\n    border-radius: 8px !important;\r\n    box-shadow: 0 4px 20px rgba(0,0,0,.18) !important;\r\n    font-family: 'Inter', sans-serif !important;\r\n  }\r\n\r\n  .popup-inner h3 {\r\n    font-size: .9rem;\r\n    font-weight: 700;\r\n    color: var(--navy);\r\n    margin-bottom: 6px;\r\n    display: flex;\r\n    align-items: center;\r\n    gap: 6px;\r\n  }\r\n\r\n  .popup-inner .hotel-list {\r\n    list-style: none;\r\n    max-height: 180px;\r\n    overflow-y: auto;\r\n    padding-right: 4px;\r\n  }\r\n\r\n  .popup-inner .hotel-list li {\r\n    font-size: .77rem;\r\n    color: #374151;\r\n    padding: 3px 0;\r\n    border-bottom: 1px solid #f3ede4;\r\n  }\r\n\r\n  .popup-inner .hotel-list li:last-child { border-bottom: none; }\r\n  .popup-total {\r\n    margin-top: 6px;\r\n    font-size: .72rem;\r\n    color: var(--gold);\r\n    font-weight: 600;\r\n  }\r\n<\/style>\r\n<\/head>\r\n<body>\r\n\r\n<div class=\"app\">\r\n  <!-- LEFT PANEL -->\r\n  <aside class=\"panel\">\r\n    <div class=\"panel-top\">\r\n      <div class=\"search-box\">\r\n        <span class=\"ico\">\ud83d\udd0d<\/span>\r\n        <input type=\"text\" id=\"searchInput\" placeholder=\"Buscar estado u hotel...\" autocomplete=\"off\"\/>\r\n      <\/div>\r\n      <div class=\"country-count\" id=\"countLabel\">28 estados \u00b7 205 hoteles<\/div>\r\n    <\/div>\r\n    <div class=\"countries-list\" id=\"countriesList\"><\/div>\r\n  <\/aside>\r\n\r\n  <!-- MAP -->\r\n  <div class=\"map-wrap\">\r\n    <div id=\"map\"><\/div>\r\n    <div class=\"map-overlay\">Haz clic en un estado para ver sus hoteles<\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\nconst HOTEL_DATA = {\"Aguascalientes\":[\"Marriott Agusacalientes\",\"Hotel Francia Aguascalientes\",\"Quality Inn Aguascalientes\"],\"Baja California\":[\"Marriott Tijuana\",\"Sleep Inn Mexicali\",\"Best Western El Cid\",\"Comfort Suites Tijuana\",\"Sleep Inn Tijuana\",\"Extended Suites Mexicali\",\"Extended Suites Tijuana\"],\"Baja California Sur\":[\"Casa Nima\",\"Casa Maat en el JW Marriott Los Cabos Beach Resort & Spa\",\"JW Marriott Los Cabos Beach\",\"Sunrock Hotel & Suites Los Cabos\",\"Casa Nima San Jose del Cabo\",\"Hotel Loreto Bay Golf & Sea\",\"Comfort inn & Suites Los Cabos\",\"Baja Club\"],\"Campeche\":[\"Misi\u00f3n Campeche\",\"Extended Suites Ciudad del Carmen\"],\"Chihuahua\":[\"Best Western Plus Chihuahua Aeropuerto\",\"Best Western Cumbres Inn Cd. Cuauht\u00e9moc\",\"Best Western Plus Sacramento\",\"Comfort Inn Ciuadad Ju\u00e1rez\",\"Extended Suites Chihuahua\",\"Extended Suites Ciudad Ju\u00e1rez\"],\"Ciudad de M\u00e9xico\":[\"Barcel\u00f3 M\u00e9xico Reforma\",\"Casa Blanca\",\"City Express by Marriot Ciudad de M\u00e9xico Alameda\",\"Emporio M\u00e9xico\",\"Galer\u00eda Plaza Reforma\",\"Galer\u00eda Plaza San Jer\u00f3nimo\",\"Hotel Geneve M\u00e9xico City\",\"Hotel Sevilla Palace\",\"Suistes Coben\",\"Marriott M\u00e9xico City Reforma Hotel\",\"Camino Real Aeropuerto\",\"Suites Perisur\",\"We Hotel Aeropuerto\",\"Best Western Hotel Majestic\",\"Radisson Paraiso Hotel M\u00e9xico City\",\"Kali Escand\u00f3n\",\"Kali Ciudadela\",\"Kali Centro\",\"Kali la Raza\",\"Font\u00e1n Reforma\",\"Hotel Ibis M\u00e9xico Alameda\",\"Ibis Styles M\u00e9xico Reforma\",\"Casa Izel\",\"Casa Cibeles\",\"Boga M\u00e9xico\",\"Distric Polanco\",\"Urban Reforma\",\"Cholula Condesa\",\"Holiday Inn & Suites M\u00e9xico Zona Reforma\",\"Royal Reforma\",\"Amberes 64 Ascend Hotel Collection\",\"Fiesta Americana Reforma\",\"Sleep Inn Ciudad de M\u00e9xico Cuajimalpa\",\"Barcel\u00f3 M\u00e9xico Santa Fe\",\"Holiday Inn Dali Aeropuerto\",\"Grand Fiesta Americana Chapultepec\",\"Hilton Reforma\",\"Hotel Century Reforma\",\"Habita\",\"Condesa DF\",\"Downtowm\",\"Hilton Garden Inn Mexico City polanco\",\"Senia\",\"Hotel Zocalo Central\",\"Hotel Hist\u00f3rico Central\",\"Hotel Canada Central\",\"Circulo Mexicano\"],\"Chiapas\":[\"Marriott Tuxtla Gutierrez\"],\"Coahuila\":[\"Misi\u00f3n Torre\u00f3n\",\"Best Western Saltillo\",\"Best Western Posada del R\u00edo Express\",\"Sleep Inn Monclova\",\"Extended Suites Saltillo\"],\"Colima\":[\"Las Hadas By Brisas en Manzanillo\",\"Best Western Plus del Mar\"],\"Durango\":[\"Best Western Posada del R\u00edo\"],\"Estado de M\u00e9xico\":[\"Misi\u00f3n Grand Valle de Bravo\",\"Misi\u00f3n Toreo\",\"Best Western Toluca\",\"Best Western Plus Gran Marques\",\"Best Western Plus Metepec & Suites\",\"Holiday Inn Express Mexico City Satelite\",\"Radisson Hotel and Conference Center Toluca\"],\"Guanajuato\":[\"Galer\u00eda Plaza Irapuato\",\"Galer\u00eda Plaza Le\u00f3n\",\"Misi\u00f3n Grand Casa Colorada\",\"Misi\u00f3n San Miguel de Allende\",\"Best Western Plus Plaza Florida & Tower\",\"Radisson Poliforum Plaza Hotel Le\u00f3n\",\"Comfort Inn Irapuato\",\"Sleep Inn Leon Antares\"],\"Guerrero\":[\"Emporio Acapulco\",\"Emporio Ixtapa (Vista Monta\u00f1a)\",\"Las Brisas Acapulco\",\"Las Brisas Ixtapa\",\"Ritz Acapulco\",\"Princess Mundo Imperial\",\"Pierre Mundo Imperial\",\"Palacio Mundo Imperial\",\"We Acapulco\",\"Best Western Taxco\"],\"Hidalgo\":[\"Misi\u00f3n Pachuca\",\"Best Western Plus Santa Cecilia Pachuca\",\"Hotel Amares Acapulco\",\"Best Western Real Tula Express\"],\"Jalisco\":[\"Barcel\u00f3 Guadalajara\",\"Misi\u00f3n Guadalajara\",\"Samba Vallarta by Emporio\",\"Best Western Plus Gran Hotel Centro Hist\u00f3rico\",\"Vista Express Guadalajara Expo Sure Stay Collecti\u00f3n by Best Western\",\"Nam\u00f3ra Guadalajara\",\"Comfort Inn Puerto Vallarta Golfside and Marina\",\"Radisson Hotel Tapatio Guadalajara\",\"Sleep Inn Guadalajara Galerias\",\"Casa Habita\"],\"Michoc\u00e1n\":[\"Misi\u00f3n Catedral Morelia\",\"Grand Cantalagua Hotel Morelia, BW Signature Collection by Best Western\",\"Best Western Plus Posada de Don Vasco\",\"Holiday Inn Express Morelia Centro Hist\u00f3rico\",\"Comfort Inn Morelia\"],\"Morelos\":[\"Radisson Hotel Cuernavaca\"],\"Nuevo Le\u00f3n\":[\"Galer\u00eda Plaza Monterrey\",\"Misi\u00f3n Monterrey Hist\u00f3rico\",\"Best Western Centro Cadereyta\",\"Best Western Centro Monterrey\",\"Best Western Plus Monterrey Aeropuerto\",\"Best Western Plus Monterrey Colon\",\"Best Western Premier Monterrey Aeropuerto\",\"Comfort Inn Monterrey Norte\",\"Comfort Inn Monterrey Valle\",\"Quality Inn Monterrey la Fe\",\"Barcel\u00f3 Monterrey Valle\",\"Sleep Inn Monterrey San Pedro\",\"Sleep Inn Monterrey Norte\",\"SJ Grand Hotel Monterrey\",\"Extended Suites Monterrey\"],\"Oaxaca\":[\"Las Brisas Huatulco\",\"Notto Zicatela\",\"Best Western Posada Chahu\u00e9\",\"Best Western Plus Tuxtepec\",\"Hotel Escondido\",\"Hotel Terrestre\",\"Hotel Humano\",\"Hotel Escondido Oaxaca\",\"Otro Oaxaca, Oaxaca\"],\"Puebla\":[\"Misi\u00f3n Angel\u00f3polis\",\"Comfort Inn Puebla Centro Hist\u00f3rico\",\"Radisson Puebla Angelopolis\",\"Sleep Inn Puebla Centro Hist\u00f3rico\",\"Presidente Intercontinental Puebla\",\"Holiday Inn Express Puebla\",\"Hotel JF Grand\",\"Arcangel Puebla\",\"La Purificadora\"],\"Queretaro\":[\"Misi\u00f3n Grand Juriquilla\",\"Misi\u00f3n San Gil\",\"Comfort Inn Quer\u00e9taro Tecnologico\",\"Sleep Inn Quer\u00e9taro\",\"Extended Suites Quer\u00e9taro\"],\"Quintana Roo\":[\"Emporio Canc\u00fan\",\"Renaissance Canc\u00fan Resort & Marina\",\"Grand Hyatt Cannc\u00fan Beach\",\"Santomar Tulum\",\"Comfort Inn Canc\u00fan Aeropuerto\",\"Extended Suites Canc\u00fan\"],\"San Luis Potos\u00ed\":[\"Misi\u00f3n Ciudad Valles\",\"Comfort Inn San Luis Potos\u00ed\",\"Radisson San Luis Potos\u00ed Aeropuerto\"],\"Sinaloa\":[\"Emporio Mazatl\u00e1n\",\"Best Western Plus Los Mochis\",\"Best Western Posada Freeman\",\"Best Western Hotel Posada Freeman Zona Dorada\",\"Sleep Inn Culiacan\",\"Sleep Inn Mazatl\u00e1n\"],\"Sonora\":[\"Best Western Plus San Jorge\",\"Comfort Inn Hermosillo Aeropuerto\",\"Sleep Inn Hermosillo\"],\"Tabasco\":[\"Marriott Villahermosa\",\"Best Western Hotel Madan Villahermosa\",\"Hotel Viva Villahermosa\",\"Sleep Inn Villahermosa\"],\"Tamaulipas\":[\"Best Western Santorin\",\"Best Western Hotel Plaza Matamoros\",\"Best Western Plus Nuevo Laredo Inn & Suites\",\"Comfort Inn Tampico\"],\"Veracruz\":[\"Emporio Veracruz\",\"Galer\u00eda Plaza Veracruz\",\"Comfort Inn Cordoba\",\"Misi\u00f3n Los Cocuyos\",\"Misi\u00f3n Orizaba\",\"Misi\u00f3n Xalapa\",\"Best Western Minatitl\u00e1n Plaza\",\"Best Western Riviera Tuxpan\",\"Hotel Veracruz Centro Hist\u00f3rico\",\"Hotel Yes Inn Nuevo Veracruz\",\"Best Western Global Express\",\"Extended Suites Coatzacoalcos\",\"Hotel Maison Couturier\",\"Hotel Az\u00facar, Veracruz\"],\"Yucat\u00e1n\":[\"Las Brisas M\u00e9rida\",\"Extended Suites M\u00e9rida\",\"Hotel Sevilla, M\u00e9rida\"],\"Zacatecas\":[\"Emporio Zacatecas\"]};\r\n\r\nconst COORDS = {\r\n  \"Aguascalientes\": [21.8853, -102.2916],\r\n  \"Baja California\": [32.6245, -115.4523],\r\n  \"Baja California Sur\": [24.1426, -110.3128],\r\n  \"Campeche\": [19.8301, -90.5349],\r\n  \"Chihuahua\": [28.6353, -106.0889],\r\n  \"Ciudad de M\u00e9xico\": [19.4326, -99.1332],\r\n  \"Chiapas\": [16.7569, -93.1292],\r\n  \"Coahuila\": [25.4232, -101.0053],\r\n  \"Colima\": [19.2433, -103.7240],\r\n  \"Durango\": [24.0277, -104.6532],\r\n  \"Estado de M\u00e9xico\": [19.2926, -99.6557],\r\n  \"Guanajuato\": [21.0190, -101.2574],\r\n  \"Guerrero\": [17.5506, -99.5024],\r\n  \"Hidalgo\": [20.0911, -98.7624],\r\n  \"Jalisco\": [20.6597, -103.3496],\r\n  \"Michoc\u00e1n\": [19.7060, -101.1950],\r\n  \"Morelos\": [18.9242, -99.2216],\r\n  \"Nuevo Le\u00f3n\": [25.6866, -100.3161],\r\n  \"Oaxaca\": [17.0732, -96.7266],\r\n  \"Puebla\": [19.0414, -98.2063],\r\n  \"Queretaro\": [20.5888, -100.3899],\r\n  \"Quintana Roo\": [21.1619, -86.8515],\r\n  \"San Luis Potos\u00ed\": [22.1565, -100.9855],\r\n  \"Sinaloa\": [24.8091, -107.3940],\r\n  \"Sonora\": [29.0729, -110.9559],\r\n  \"Tabasco\": [17.9892, -92.9475],\r\n  \"Tamaulipas\": [23.7369, -99.1411],\r\n  \"Veracruz\": [19.1738, -96.1342],\r\n  \"Yucat\u00e1n\": [20.9674, -89.5926],\r\n  \"Zacatecas\": [22.7709, -102.5832]\r\n};\r\n\r\nconst FLAGS = {};\r\nObject.keys(COORDS).forEach(k => FLAGS[k] = \"\ud83d\udccd\");\r\n\r\n\/\/ \u2500\u2500 MAP INIT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\nconst map = L.map('map', { zoomControl: true }).setView([23.6, -102.5], 5);\r\n\r\nL.tileLayer('https:\/\/{s}.basemaps.cartocdn.com\/rastertiles\/voyager\/{z}\/{x}\/{y}{r}.png', {\r\n  attribution: '\u00a9 OpenStreetMap \u00a9 CARTO',\r\n  subdomains: 'abcd', maxZoom: 19\r\n}).addTo(map);\r\n\r\nconst markerIcon = (count) => L.divIcon({\r\n  html: `<div style=\"\r\n    background: #0f1f3d;\r\n    color: #fff;\r\n    border: 2.5px solid #c9973a;\r\n    border-radius: 50%;\r\n    width: 36px; height: 36px;\r\n    display: flex; align-items: center; justify-content: center;\r\n    font-size: .72rem; font-weight: 700;\r\n    font-family: Inter, sans-serif;\r\n    box-shadow: 0 2px 8px rgba(0,0,0,.3);\r\n  \">${count}<\/div>`,\r\n  className: '',\r\n  iconSize: [36, 36],\r\n  iconAnchor: [18, 18]\r\n});\r\n\r\nconst markers = {};\r\n\r\nObject.entries(HOTEL_DATA).forEach(([country, hotels]) => {\r\n  const coords = COORDS[country];\r\n  if (!coords) return;\r\n\r\n  const m = L.marker(coords, { icon: markerIcon(hotels.length) }).addTo(map);\r\n\r\n  const hotelList = hotels.slice(0, 20).map(h => `<li>${h}<\/li>`).join('');\r\n  const more = hotels.length > 20 ? `<div class=\"popup-total\">+${hotels.length - 20} hoteles m\u00e1s<\/div>` : '';\r\n\r\n  m.bindPopup(`\r\n    <div class=\"popup-inner\">\r\n      <h3>${FLAGS[country] || '\ud83c\udfe8'} ${country}<\/h3>\r\n      <ul class=\"hotel-list\">${hotelList}<\/ul>\r\n      ${more}\r\n      <div class=\"popup-total\">${hotels.length} hotel${hotels.length !== 1 ? 'es' : ''} en convenio<\/div>\r\n    <\/div>\r\n  `, { maxWidth: 260 });\r\n\r\n  m.on('click', () => selectCountry(country));\r\n  markers[country] = m;\r\n});\r\n\r\n\/\/ \u2500\u2500 PANEL BUILD \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\nconst list = document.getElementById('countriesList');\r\nconst searchInput = document.getElementById('searchInput');\r\n\r\nlet allCountries = Object.keys(HOTEL_DATA).sort((a, b) => a.localeCompare(b, 'es'));\r\n\r\nfunction buildList(query = '') {\r\n  const q = query.toLowerCase().trim();\r\n  list.innerHTML = '';\r\n  let matchedCountries = 0;\r\n  let matchedHotels = 0;\r\n\r\n  allCountries.forEach(country => {\r\n    const hotels = HOTEL_DATA[country];\r\n    const countryMatch = country.toLowerCase().includes(q);\r\n    const matchingHotels = q ? hotels.filter(h => h.toLowerCase().includes(q)) : hotels;\r\n\r\n    if (!countryMatch && matchingHotels.length === 0) return;\r\n\r\n    matchedCountries++;\r\n    matchedHotels += matchingHotels.length;\r\n\r\n    const item = document.createElement('div');\r\n    item.className = 'country-item';\r\n    item.dataset.country = country;\r\n\r\n    const btn = document.createElement('button');\r\n    btn.className = 'country-btn';\r\n    btn.innerHTML = `\r\n      <span class=\"country-flag\">${FLAGS[country] || '\ud83c\udf10'}<\/span>\r\n      <div class=\"country-info\">\r\n        <div class=\"country-name\">${country}<\/div>\r\n        <div class=\"hotel-count\">${matchingHotels.length} hotel${matchingHotels.length !== 1 ? 'es' : ''}<\/div>\r\n      <\/div>\r\n      <span class=\"chevron\">\u25b6<\/span>\r\n    `;\r\n\r\n    const sub = document.createElement('div');\r\n    sub.className = 'hotels-sub';\r\n    if (q) sub.classList.add('open'), btn.classList.add('open');\r\n\r\n    matchingHotels.forEach(h => {\r\n      const hi = document.createElement('div');\r\n      hi.className = 'hotel-item';\r\n      hi.textContent = h;\r\n      hi.addEventListener('click', () => {\r\n        const coords = COORDS[country];\r\n        if (coords) map.flyTo(coords, 8, { duration: 1.2 });\r\n        markers[country]?.openPopup();\r\n      });\r\n      sub.appendChild(hi);\r\n    });\r\n\r\n    btn.addEventListener('click', () => {\r\n      const isOpen = sub.classList.contains('open');\r\n      \/\/ Close others\r\n      list.querySelectorAll('.hotels-sub.open').forEach(s => {\r\n        s.classList.remove('open');\r\n        s.previousElementSibling.classList.remove('open', 'selected');\r\n      });\r\n      if (!isOpen) {\r\n        sub.classList.add('open');\r\n        btn.classList.add('open', 'selected');\r\n        selectCountry(country);\r\n      }\r\n    });\r\n\r\n    item.appendChild(btn);\r\n    item.appendChild(sub);\r\n    list.appendChild(item);\r\n  });\r\n\r\n  document.getElementById('countLabel').textContent =\r\n    q ? `${matchedCountries} estados \u00b7 ${matchedHotels} hoteles encontrados`\r\n      : `${allCountries.length} estados \u00b7 209 hoteles`;\r\n}\r\n\r\nfunction selectCountry(country) {\r\n  const coords = COORDS[country];\r\n  if (coords && window.innerWidth > 768) {\r\n    map.flyTo(coords, 8, { duration: 1.2 });\r\n    setTimeout(() => markers[country]?.openPopup(), 1200);\r\n  }\r\n  \/\/ Highlight in panel\r\n  list.querySelectorAll('.country-btn').forEach(b => b.classList.remove('selected'));\r\n  const item = list.querySelector(`[data-country=\"${country}\"] .country-btn`);\r\n  if (item) {\r\n    item.classList.add('selected');\r\n    item.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n  }\r\n}\r\n\r\nsearchInput.addEventListener('input', e => buildList(e.target.value));\r\n\r\nbuildList();\r\n<\/script>\r\n<\/body>\r\n<\/html>\r\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>\n\t\t","protected":false},"excerpt":{"rendered":"<p>CONVENIOS CON HOTELES NACIONALES Convenios Hoteles M\u00e9xico 2026 ???? 28 estados \u00b7 205 hoteles Haz clic en un estado para [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-760","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ccmexico.com.mx\/turismo\/wp-json\/wp\/v2\/pages\/760","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ccmexico.com.mx\/turismo\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ccmexico.com.mx\/turismo\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ccmexico.com.mx\/turismo\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ccmexico.com.mx\/turismo\/wp-json\/wp\/v2\/comments?post=760"}],"version-history":[{"count":68,"href":"https:\/\/ccmexico.com.mx\/turismo\/wp-json\/wp\/v2\/pages\/760\/revisions"}],"predecessor-version":[{"id":1093,"href":"https:\/\/ccmexico.com.mx\/turismo\/wp-json\/wp\/v2\/pages\/760\/revisions\/1093"}],"wp:attachment":[{"href":"https:\/\/ccmexico.com.mx\/turismo\/wp-json\/wp\/v2\/media?parent=760"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}