{"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-11-04T19:18:30","modified_gmt":"2026-11-04T19:18:30","slug":"convenios-con-hoteles-nacionales","status":"publish","type":"page","link":"https:\/\/ccmexico.com.mx\/turismo\/convenios-con-hoteles-nacionales\/","title":{"rendered":"CONVENIOS CON HOTELES NACIONALES"},"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  \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\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\">32 estados \u00b7 388 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\", \"City Express by Marriott Aguascalientes Sur\", \"City Express Junior by Marriott Aguascalientes Centro\"], \"Baja California\": [\"Marriott Tijuana\", \"Sleep Inn Mexicali\", \"Best Western El Cid\", \"Comfort Suites Tijuana\", \"Sleep Inn Tijuana\", \"Extended Suites Mexicali\", \"Extended Suites Tijuana\", \"Araiza Mexicali\", \"City Express Plus by Marriott Ensenada\", \"City Express Plus by Marriott Mexicali\", \"City Express Plus by Marriott Tijuana\", \"City Express Suites by Marriott Tijuana Rio\", \"City Express by Marriott Ensenada\", \"City Express by Marriott Mexicali\", \"City Express by Marriott Rosarito\", \"City Express by Marriott Tijuana El Florido\", \"City Express by Marriott Tijuana Insurgentes\", \"City Express by Marriott Tijuana Otay\", \"City Express by Marriott Tijuana R\u00edo\", \"City Express Junior by Marriott Mexicali\", \"City Express Junior by Marriott Tijuana Otay\"], \"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\", \"City Express Plus by Marriott Cabo San Lucas\", \"City Express by Marriott La Paz\"], \"Campeche\": [\"Misi\u00f3n Campeche\", \"Extended Suites Ciudad del Carmen\", \"City Express by Marriott Campeche\", \"City Express by Marriott Ciudad del Carmen\", \"City Express Junior by Marriott Ciudad Del Carmen\", \"City Express Junior by Marriott Ciudad Del Carmen Aeropuerto\"], \"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\", \"City Express by Marriott Chihuahua\", \"City Express by Marriott Ciudad Ju\u00e1rez\", \"City Express Junior by Marriott Ciudad Ju\u00e1rez Consulado\"], \"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\", \"Suites 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\", \"Holiday Inn M\u00e9xico Zona Centro\", \"JW Marriott Santa Fe\", \"Laila M\u00e9xico City Reforma\", \"MC Suites\", \"Hotel Premier\", \"Hotel Diligencias\", \"Hotel Azores\", \"Hotel Cuba\", \"Hotel Camino Real Polanco\", \"MX Congreso\", \"MX Lagunilla\", \"MX Z\u00f3calo\", \"MX Centro\", \"MX Reforma\", \"MX Roma\", \"MX Aeropuerto\", \"MX Condesa\", \"MX Forum Buenavista\", \"MX Garibaldi\", \"Vive MX Cuauht\u00e9moc\", \"Vive MX WTC\", \"Escala Central del Norte\", \"Escala Colonia Roma\", \"Escala Siglo XXI\", \"Cadillac Hotel Boutique\", \"Hotel Milan\", \"Presidente Intercontinental M\u00e9xico City Miyana\", \"Hotel Metropol\", \"Presidente Intercontinental Mexico City\", \"Hyden Mexico City Reforma\", \"Hotel Imperial Reforma\", \"City Express Plus by Marriott Insurgentes Sur\", \"City Express Plus by Marriott Patio Universidad\", \"City Express Plus by Marriott Perif\u00e9rico Sur Tlalpan\", \"City Express Plus by Marriott Reforma El \u00c1ngel\", \"City Express Plus by Marriott Santa Fe\", \"City Express Suites by Marriott Anzures\", \"City Express by Marriott CDMX La Villa\", \"City Express by Marriott Ciudad De M\u00e9xico La Raza\", \"City Express by Marriott CDMX Tlalpan\", \"City Express by Marriott Aeropuerto Ciudad De M\u00e9xico\", \"City Express by Marriott EBC Reforma\", \"City Express by Marriott CDMX Plaza Central\", \"City Express Junior by Marriott CDMX Sullivan\", \"Tru by Hilton Mexico City Airport\"], \"Chiapas\": [\"Marriott Tuxtla Gutierrez\", \"City Express by Marriott Comit\u00e1n\", \"City Express by Marriott Tapachula\", \"City Express by Marriott Tuxtla Guti\u00e9rrez\", \"City Express Junior by Marriott Tuxtla Guti\u00e9rrez Poliforum\"], \"Coahuila\": [\"Misi\u00f3n Torre\u00f3n\", \"Best Western Saltillo\", \"Best Western Posada del R\u00edo Express\", \"Sleep Inn Monclova\", \"Extended Suites Saltillo\", \"City Express by Marriott Piedras Negras\", \"City Express by Marriott Saltillo Norte\", \"City Express by Marriott Saltillo Sur\"], \"Colima\": [\"Las Hadas By Brisas en Manzanillo\", \"Best Western Plus del Mar\", \"City Express by Marriott Manzanillo\"], \"Durango\": [\"Best Western Posada del R\u00edo\", \"City Express by Marriott Durango\"], \"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\", \"MX Cuautitl\u00e1n\", \"City Express Plus by Marriott Interlomas\", \"City Express Plus by Marriott Mundo E\", \"City Express by Marriott Tepotzotl\u00e1n\", \"City Express by Marriott Tlalnepantla\", \"City Express by Marriott Toluca\", \"City Express Junior by Marriott Toluca Aeropuerto\", \"City Express Junior by Marriott Toluca Zona Industrial\"], \"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\", \"MX San Miguel de Allende\", \"City Express Plus by Marriott Le\u00f3n Centro De Convenciones\", \"City Express by Marriott Irapuato\", \"City Express by Marriott Irapuato Norte\", \"City Express by Marriott Le\u00f3n\", \"City Express by Marriott Salamanca\", \"City Express by Marriott Silao Aeropuerto\", \"City Express Junior by Marriott Le\u00f3n Centro De Convenciones\", \"City Express by Marriott Celaya Parque\", \"City Express by Marriott Celaya Galer\u00edas\"], \"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\", \"MonteTaxco Resort & Country Club\"], \"Hidalgo\": [\"Misi\u00f3n Pachuca\", \"Best Western Plus Santa Cecilia Pachuca\", \"Hotel Amares Acapulco\", \"Best Western Real Tula Express\", \"Hotel & Glampling Husca Sierra Verde\", \"City Express by Marriott Tula\"], \"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\", \"Holiday Inn Express Guadalajara Expo\", \"City Express Plus by Marriott Guadalajara Expo\", \"City Express Plus by Marriott Guadalajara Palomar\", \"City Express Plus by Marriott Guadalajara Providencia\", \"City Express Plus by Marriott Puerto Vallarta\", \"City Express by Marriott Guadalajara Aeropuerto\", \"City Express by Marriott Lagos De Moreno\", \"City Express Junior by Marriott Guadalajara Perif\u00e9rico Sur\"], \"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\", \"Holiday Inn Express Morelia\", \"City Express by Marriott L\u00e1zaro C\u00e1rdenas\"], \"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\", \"City Express Plus by Marriott Monterrey Galer\u00edas\", \"City Express Plus by Marriott Monterrey Nuevo Sur\", \"City Express Plus by Marriott Monterrey Centro\", \"City Express by Marriott Monterrey Aeropuerto\", \"City Express by Marriott Monterrey Santa Catarina\", \"City Express by Marriott Monterrey Universidad\"], \"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\", \"City Express by Marriott Oaxaca\", \"City Express by Marriott Salina Cruz\", \"City Express Junior by Marriott Tuxtepec\"], \"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\", \"Hotel y Aguas Termales de Chignahuapan\", \"Four Points by Sheraton Puebla\", \"Wyndham Puebla Angel\u00f3polis\", \"La Quinta by Wyndham Puebla Palmas Angel\u00f3polis\", \"Escala Puebla Centro\", \"City Express by Marriott Puebla Angel\u00f3polis\", \"City Express by Marriott Puebla Finsa\", \"City Express by Marriott Puebla Centro\", \"City Express by Marriott Tehuac\u00e1n\", \"City Express Junior by Marriott Puebla Angel\u00f3polis\", \"City Express Junior by Marriott Puebla Finsa\"], \"Queretaro\": [\"Misi\u00f3n Grand Juriquilla\", \"Misi\u00f3n San Gil\", \"Comfort Inn Quer\u00e9taro Tecnologico\", \"Sleep Inn Quer\u00e9taro\", \"Extended Suites Quer\u00e9taro\", \"Holiday Inn Quer\u00e9taro Zona Diamante\", \"Holiday Inn Quer\u00e9taro Zona Krystal\", \"Vive MX El Marques\", \"City Express Suites by Marriott Quer\u00e9taro\", \"City Express by Marriott Quer\u00e9taro\", \"City Express by Marriott Quer\u00e9taro Jur\u00edca\"], \"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\", \"City Express Plus by Marriott Canc\u00fan Aeropuerto Riviera\", \"City Express by Marriott Canc\u00fan\", \"City Express by Marriott Canc\u00fan Aeropuerto Riviera\", \"City Express by Marriott Chetumal\", \"City Express by Marriott Playa Del Carmen\", \"City Express Junior by Marriott Canc\u00fan\"], \"San Luis Potos\u00ed\": [\"Misi\u00f3n Ciudad Valles\", \"Comfort Inn San Luis Potos\u00ed\", \"Radisson San Luis Potos\u00ed Aeropuerto\", \"City Express by Marriott San Luis Potos\u00ed Zona Industrial\", \"City Express by Marriott San Luis Potos\u00ed Zona Universitaria\", \"City Express Junior by Marriott San Luis Potos\u00ed Carranza\", \"City Express Junior by Marriott San Luis Potos\u00ed Zona Industrial\"], \"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\", \"Microtel by Wyndham Culiac\u00e1n\", \"City Express by Marriott Los Mochis\"], \"Sonora\": [\"Best Western Plus San Jorge\", \"Comfort Inn Hermosillo Aeropuerto\", \"Sleep Inn Hermosillo\", \"Araiza Hermosillo\", \"City Express by Marriott Caborca\", \"City Express by Marriott Cananea\", \"City Express by Marriott Ciudad Obreg\u00f3n\", \"City Express by Marriott Guaymas\", \"City Express by Marriott Hermosillo\", \"City Express by Marriott Hermosillo Expo\", \"City Express by Marriott Nogales\"], \"Tabasco\": [\"Marriott Villahermosa\", \"Best Western Hotel Madan Villahermosa\", \"Hotel Viva Villahermosa\", \"Sleep Inn Villahermosa\", \"City Express by Marriott Para\u00edso\", \"City Express by Marriott Villahermosa\", \"City Express Junior by Marriott Villahermosa\"], \"Tamaulipas\": [\"Best Western Santorin\", \"Best Western Hotel Plaza Matamoros\", \"Best Western Plus Nuevo Laredo Inn & Suites\", \"Comfort Inn Tampico\", \"City Express Plus by Marriott Tampico\", \"City Express by Marriott Tampico Altamira\", \"City Express by Marriott Ciudad Victoria\", \"City Express by Marriott Matamoros\", \"City Express by Marriott Nuevo Laredo\", \"City Express by Marriott Reynosa\", \"City Express by Marriott Reynosa Aeropuerto\", \"City Express by Marriott 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\", \"Ramada Plaza by Wyndham Boca del R\u00edo Veracruz\", \"City Express by Marriott Minatitl\u00e1n\", \"City Express by Marriott Tuxpan\", \"City Express by Marriott Veracruz\", \"City Express by Marriott Xalapa\", \"City Express Junior by Marriott Veracruz Aeropuerto\"], \"Yucat\u00e1n\": [\"Las Brisas M\u00e9rida\", \"Extended Suites M\u00e9rida\", \"Hotel Sevilla, M\u00e9rida\", \"City Express Plus by Marriott M\u00e9rida\", \"City Express by Marriott M\u00e9rida\", \"City Express Junior by Marriott M\u00e9rida Altabrisa\"], \"Zacatecas\": [\"Emporio Zacatecas\", \"City Express by Marriott Zacatecas\"], \"Nayarit\": [\"City Express by Marriott Tepic\"], \"Tlaxcala\": [\"City Express by Marriott Apizaco\"]};\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  \"Tlaxcala\": [19.3139, -98.2404],\r\n  \"Nayarit\": [21.5039, -104.8946]\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}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png', {\r\n  attribution: '\u00a9 OpenStreetMap contributors',\r\n  subdomains: 'abc', 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  const totalHotels = allCountries.reduce((sum, c) => sum + HOTEL_DATA[c].length, 0);\r\n  document.getElementById('countLabel').textContent =\r\n    q ? `${matchedCountries} estados \u00b7 ${matchedHotels} hoteles encontrados`\r\n      : `${allCountries.length} estados \u00b7 ${totalHotels} 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<div class=\"elementor-element elementor-element-5a00d7b e-con-full e-flex e-con e-parent\" data-id=\"5a00d7b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-4a56199 e-con-full e-flex e-con e-child\" data-id=\"4a56199\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-913bd76 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"913bd76\" data-element_type=\"widget\" data-e-type=\"widget\" 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=\"#elementor-action%3Aaction%3Dpopup%3Aopen%26settings%3DeyJpZCI6IjEyNDIiLCJ0b2dnbGUiOmZhbHNlfQ%3D%3D\">\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\">SOLICITAR INFORMACI\u00d3N<\/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 class=\"elementor-element elementor-element-15aa442 elementor-widget elementor-widget-text-editor\" data-id=\"15aa442\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><a href=\"#\">terminos_y_condiciones.pdf<\/a><\/p>\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<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>CONVENIOS CON HOTELES NACIONALES Convenios Hoteles M\u00e9xico 2026 \ud83d\udd0d 32 estados \u00b7 388 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":88,"href":"https:\/\/ccmexico.com.mx\/turismo\/wp-json\/wp\/v2\/pages\/760\/revisions"}],"predecessor-version":[{"id":2572,"href":"https:\/\/ccmexico.com.mx\/turismo\/wp-json\/wp\/v2\/pages\/760\/revisions\/2572"}],"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}]}}