{"id":164992,"date":"2026-08-12T17:39:48","date_gmt":"2026-08-12T17:39:48","guid":{"rendered":"https:\/\/ultrajewels.com\/?page_id=164992"},"modified":"2026-10-26T18:03:36","modified_gmt":"2026-10-26T18:03:36","slug":"visit-us","status":"publish","type":"page","link":"https:\/\/ultrajewels.com\/en\/visit-us\/","title":{"rendered":"Visit Us"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"164992\" class=\"elementor elementor-164992\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f3a81a8 e-con-full e-flex e-con e-parent\" data-id=\"f3a81a8\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a42bc00 elementor-widget elementor-widget-heading\" data-id=\"a42bc00\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">OUR BOUTIQUES<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f7c3dee elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"f7c3dee\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"uj-guard\">\r\n  <style>\r\n    .uj-guard {\r\n      margin-top: 10px !important;\r\n      position: relative !important;\r\n      z-index: 0 !important;\r\n      width: 100% !important;\r\n      clear: both !important;\r\n      font-family: 'Montserrat', sans-serif !important;\r\n      color: #333 !important;\r\n      background: #fff !important;\r\n    }\r\n\r\n    .uj-guard * {\r\n      margin: 0 !important;\r\n      padding: 0 !important;\r\n      box-sizing: border-box !important;\r\n    }\r\n\r\n    .uj-center {\r\n      display: flex !important;\r\n      justify-content: center !important;\r\n      width: 100% !important;\r\n    }\r\n\r\n    .uj-center > .container-uj {\r\n      width: 100% !important;\r\n      max-width: 85% !important;\r\n      margin: 0 auto !important;\r\n    }\r\n\r\n    .uj-guard .store-locator {\r\n      display: flex !important;\r\n      min-height: 600px !important;\r\n      width: 100% !important;\r\n      flex-direction: row-reverse !important;\r\n      justify-content: center !important;\r\n      gap: 40px !important;\r\n      align-items: flex-start !important;\r\n    }\r\n\r\n    .uj-guard .map-section {\r\n      flex: 1 !important;\r\n      background: #f5f5f5 !important;\r\n      position: sticky !important;\r\n      top: 60px !important;\r\n      height: calc(180px * 4 + 20px * 3) !important;\r\n      margin-top: 80px !important;\r\n      overflow: hidden !important;\r\n    }\r\n\r\n    .uj-guard .map-frame {\r\n      width: 100% !important;\r\n      height: 100% !important;\r\n      min-height: 600px !important;\r\n      border: 0 !important;\r\n      display: block !important;\r\n    }\r\n\r\n    .uj-guard .map-reset-btn {\r\n      position: absolute !important;\r\n      top: 10px !important;\r\n      right: 10px !important;\r\n      display: none;\r\n      font-size: 12px !important;\r\n      color: #fff !important;\r\n      background: #EF922E !important;\r\n      border-radius: 99px !important;\r\n      padding: 8px 16px !important;\r\n      border: none !important;\r\n      cursor: pointer !important;\r\n      z-index: 999 !important;\r\n      font-weight: 600 !important;\r\n      box-shadow: 0 2px 4px rgba(0,0,0,0.2) !important;\r\n    }\r\n\r\n    .uj-guard .stores-section {\r\n      flex: 1 !important;\r\n      padding: 0 20px !important;\r\n      background: #fff !important;\r\n      max-height: calc(200px * 4 + 20px * 3) !important;\r\n      display: flex !important;\r\n      flex-direction: column !important;\r\n      overflow: hidden !important;\r\n      position: sticky !important;\r\n      top: 60px !important;\r\n    }\r\n\r\n    .uj-guard .city-tabs-wrapper {\r\n      display: flex !important;\r\n      flex-direction: column !important;\r\n      gap: 12px !important;\r\n      margin-bottom: 20px !important;\r\n      align-items: flex-start !important;\r\n      position: relative !important;\r\n      z-index: 20 !important;\r\n      background: #fff !important;\r\n      padding-top: 20px !important;\r\n      padding-bottom: 10px !important;\r\n      flex-shrink: 0 !important;\r\n    }\r\n\r\n    .uj-guard .tabs-row {\r\n      display: flex !important;\r\n      flex-wrap: wrap !important;\r\n      gap: 6px !important;\r\n    }\r\n\r\n    .uj-guard .city-tab {\r\n      display: inline-block !important;\r\n      font-size: 11px !important;\r\n      color: #fff !important;\r\n      background: #d2d2d2 !important;\r\n      border-radius: 99px !important;\r\n      padding: 6px 12px !important;\r\n      border: none !important;\r\n      cursor: pointer !important;\r\n      font-weight: 600 !important;\r\n      transition: 0.2s !important;\r\n    }\r\n\r\n    .uj-guard .city-tab.active,\r\n    .uj-guard .city-tab:hover {\r\n      background: #EF922E !important;\r\n    }\r\n\r\n    .uj-guard .stores-list {\r\n      display: flex !important;\r\n      flex-direction: column !important;\r\n      gap: 20px !important;\r\n      overflow-y: auto !important;\r\n      flex: 1 !important;\r\n      padding-right: 5px !important;\r\n      padding-bottom: 80px !important;\r\n    }\r\n\r\n    .uj-guard .store-card {\r\n      display: flex !important;\r\n      flex-direction: row !important;\r\n      width: 100% !important;\r\n      background: #fafafa !important;\r\n      height: 180px !important;\r\n      position: relative !important;\r\n      overflow: hidden !important;\r\n      border: none !important;\r\n      transition: all 0.3s ease !important;\r\n      flex-shrink: 0 !important;\r\n      cursor: pointer !important;\r\n    }\r\n\r\n    .uj-guard .store-card:hover {\r\n      box-shadow: 0 4px 12px rgba(0,0,0,0.1) !important;\r\n    }\r\n\r\n    .uj-guard .store-card.active {\r\n      box-shadow: 0 4px 12px rgba(255,140,0,0.2) !important;\r\n      background: #fff !important;\r\n    }\r\n\r\n    .uj-guard .slider-wrapper {\r\n      position: relative !important;\r\n      width: 180px !important;\r\n      height: 180px !important;\r\n      flex-shrink: 0 !important;\r\n      overflow: hidden !important;\r\n    }\r\n\r\n    .uj-guard .slider-track {\r\n      display: flex !important;\r\n      height: 100% !important;\r\n      width: 100% !important;\r\n      transition: transform 0.3s ease-in-out !important;\r\n    }\r\n\r\n    .uj-guard .store-image {\r\n      width: 100% !important;\r\n      height: 100% !important;\r\n      object-fit: cover !important;\r\n      flex-shrink: 0 !important;\r\n      display: block !important;\r\n    }\r\n\r\n    .uj-guard .slider-btn {\r\n      position: absolute !important;\r\n      top: 50% !important;\r\n      transform: translateY(-50%) !important;\r\n      width: 24px !important;\r\n      height: 24px !important;\r\n      background: rgba(0,0,0,0.5) !important;\r\n      color: #fff !important;\r\n      border: none !important;\r\n      border-radius: 50% !important;\r\n      cursor: pointer !important;\r\n      z-index: 5 !important;\r\n      display: flex !important;\r\n      align-items: center !important;\r\n      justify-content: center !important;\r\n      font-size: 12px !important;\r\n      opacity: 0;\r\n      transition: opacity 0.2s !important;\r\n    }\r\n\r\n    .uj-guard .slider-wrapper:hover .slider-btn {\r\n      opacity: 1 !important;\r\n    }\r\n\r\n    .uj-guard .slider-btn.prev {\r\n      left: 5px !important;\r\n    }\r\n\r\n    .uj-guard .slider-btn.next {\r\n      right: 5px !important;\r\n    }\r\n\r\n    .uj-guard .store-info {\r\n      flex: 1 !important;\r\n      padding: 15px !important;\r\n      display: flex !important;\r\n      flex-direction: column !important;\r\n      justify-content: flex-start !important;\r\n    }\r\n\r\n    .uj-guard .store-brand {\r\n      font-size: 14px !important;\r\n      font-weight: 700 !important;\r\n      color: #EF922E !important;\r\n      text-transform: uppercase !important;\r\n      margin-bottom: 4px !important;\r\n      letter-spacing: 0.5px !important;\r\n    }\r\n\r\n    .uj-guard .store-location {\r\n      font-size: 12px !important;\r\n      font-weight: 300 !important;\r\n      color: #888 !important;\r\n      text-transform: uppercase !important;\r\n      margin-bottom: 8px !important;\r\n    }\r\n\r\n    .uj-guard .store-address {\r\n      font-size: 11px !important;\r\n      color: #666 !important;\r\n      line-height: 1.4 !important;\r\n      max-width: 90% !important;\r\n    }\r\n\r\n    .uj-guard .store-actions {\r\n      position: absolute !important;\r\n      bottom: 15px !important;\r\n      right: 15px !important;\r\n    }\r\n\r\n    .uj-guard .btn-detail {\r\n      background: #EF922E !important;\r\n      color: #fff !important;\r\n      padding: 6px 12px !important;\r\n      border-radius: 99px !important;\r\n      font-size: 10px !important;\r\n      font-weight: 700 !important;\r\n      text-decoration: none !important;\r\n      text-transform: uppercase !important;\r\n      letter-spacing: 0.5px !important;\r\n    }\r\n\r\n    .uj-guard .stores-list::-webkit-scrollbar {\r\n      width: 4px !important;\r\n    }\r\n\r\n    .uj-guard .stores-list::-webkit-scrollbar-track {\r\n      background: #f5f5f5 !important;\r\n    }\r\n\r\n    .uj-guard .stores-list::-webkit-scrollbar-thumb {\r\n      background-color: #EF922E !important;\r\n      border-radius: 10px !important;\r\n    }\r\n\r\n    @media (max-width: 968px) {\r\n      .uj-center > .container-uj {\r\n        max-width: 100% !important;\r\n      }\r\n\r\n      .uj-guard {\r\n        margin-top: 0 !important;\r\n      }\r\n\r\n      .uj-guard .store-locator {\r\n        flex-direction: column !important;\r\n        gap: 0 !important;\r\n        margin-top: 0 !important;\r\n      }\r\n\r\n      .uj-guard .map-section {\r\n        order: 1 !important;\r\n        width: 100% !important;\r\n        flex: none !important;\r\n        height: 400px !important;\r\n        position: relative !important;\r\n        top: 0 !important;\r\n        margin-top: 0 !important;\r\n      }\r\n\r\n      .uj-guard .map-frame {\r\n        min-height: 400px !important;\r\n      }\r\n\r\n      .uj-guard .stores-section {\r\n        width: 100% !important;\r\n        padding: 0 20px !important;\r\n        position: relative !important;\r\n        top: 0 !important;\r\n        max-height: none !important;\r\n      }\r\n\r\n      .uj-guard .store-card {\r\n        flex-direction: column !important;\r\n        height: auto !important;\r\n        max-width: 100% !important;\r\n      }\r\n\r\n      .uj-guard .slider-wrapper {\r\n        width: 100% !important;\r\n        height: 220px !important;\r\n      }\r\n\r\n      .uj-guard .store-info {\r\n        padding: 15px !important;\r\n        padding-bottom: 50px !important;\r\n        position: relative !important;\r\n      }\r\n\r\n      .uj-guard .store-actions {\r\n        bottom: 15px !important;\r\n        right: 15px !important;\r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <div class=\"uj-center\">\r\n    <div class=\"container-uj\">\r\n      <div class=\"store-locator\">\r\n\r\n        <div class=\"map-section\">\r\n          <iframe class=\"map-frame\" id=\"ujMapFrame\" title=\"Boutiques map\" loading=\"eager\"><\/iframe>\r\n          <button class=\"map-reset-btn\" id=\"resetMapBtn\">\u2190 View all<\/button>\r\n        <\/div>\r\n\r\n        <div class=\"stores-section\">\r\n          <div class=\"city-tabs-wrapper\">\r\n            <div class=\"tabs-row\">\r\n              <button class=\"city-tab\" data-city=\"cancun\">CANC\u00daN<\/button>\r\n              <button class=\"city-tab\" data-city=\"playa\">PLAYA DEL CARMEN<\/button>\r\n              <button class=\"city-tab\" data-city=\"cabos\">LOS CABOS<\/button>\r\n              <button class=\"city-tab\" data-city=\"monterrey\">MONTERREY<\/button>\r\n              <button class=\"city-tab\" data-city=\"merida\">M\u00c9RIDA<\/button>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <div class=\"stores-list\" id=\"storesList\"><\/div>\r\n        <\/div>\r\n\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<script>\r\n(function () {\r\n  const stores = [\r\n    {\r\n      id: 1,\r\n      city: 'playa',\r\n      name: 'ULTRAJEWELS QUINTA AVENIDA',\r\n      address: '5ta Avenida Norte entre Calle 14 y 16, Centro, 77710 Playa del Carmen, Q.R.',\r\n      images: ['https:\/\/ultrajewels.com\/wp-content\/uploads\/2025\/12\/ULTRA_2026-enero_tienda-Twin_playa-3-scaled.jpg'],\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/ultrajewels-fifth-avenue\/',\r\n      lat: 20.628701,\r\n      lng: -87.0732615\r\n    },\r\n    {\r\n      id: 2,\r\n      city: 'cancun',\r\n      name: 'ULTRAJEWELS PUERTO CANC\u00daN',\r\n      address: 'Marina Puerto Canc\u00fan, Blvd. Kukulc\u00e1n Km 1.5, 77500 Canc\u00fan, Q.R.',\r\n      images: ['https:\/\/ultrajewels.com\/wp-content\/uploads\/2025\/12\/ULTRA_2026-enero_tienda-puerto-1-scaled.jpg'],\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/ultrajewels-puerto-cancun\/',\r\n      lat: 21.1609728,\r\n      lng: -86.8085292\r\n    },\r\n    {\r\n      id: 3,\r\n      city: 'cancun',\r\n      name: 'ULTRAJEWELS LUXURY AVENUE CANC\u00daN',\r\n      address: 'Luxury Avenue Boutique Mall, Blvd. Kukulc\u00e1n Km 13.5, Zona Hotelera, 77500 Canc\u00fan, Q.R.',\r\n      images: [\r\n        'https:\/\/ultrajewels.com\/wp-content\/uploads\/2025\/12\/ULTRA_2026-enero_tienda-luxury-2-scaled.jpg',\r\n        'https:\/\/neo-emarketing.com\/ultrajewels\/wp-content\/uploads\/2025\/10\/quintaavenida.png'\r\n      ],\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/ultrajewels-luxury-avenue-cancun\/',\r\n      lat: 21.1010994,\r\n      lng: -86.7659383\r\n    },\r\n    {\r\n      id: 19,\r\n      city: 'cabos',\r\n      name: 'ULTRAJEWELS \u00c1NIMA VILLAGE',\r\n      address: '\u00c1nima Village, Local P.02 y P.04, Carretera Transpeninsular Km 10.3, Cabo del Sol, 23455 Cabo San Lucas, B.C.S.',\r\n      image: 'https:\/\/ultrajewels.com\/wp-content\/uploads\/2026\/10\/image.webp',\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/ultrajewels-anima-village\/',\r\n      lat: 22.9195467,\r\n      lng: -109.835455\r\n    },\r\n    {\r\n      id: 4,\r\n      city: 'cabos',\r\n      name: 'ULTRAJEWELS MARINA CABO',\r\n      address: 'Blvd. Paseo de la Marina, Centro, 23450 Cabo San Lucas, B.C.S.',\r\n      image: 'https:\/\/ultrajewels.com\/wp-content\/uploads\/2026\/04\/1-1.webp',\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/ultrajewels-marina-cabo-san-lucas\/',\r\n      lat: 22.8855048,\r\n      lng: -109.9141334\r\n    },\r\n    {\r\n      id: 5,\r\n      city: 'cabos',\r\n      name: 'ULTRAJEWELS LUXURY AVENUE CABO SAN LUCAS',\r\n      address: 'Plaza Puerto Para\u00edso, Av. L\u00e1zaro C\u00e1rdenas, esquina Cabo Bello, Cabo San Lucas, B.C.S.',\r\n      image: 'https:\/\/ultrajewels.com\/wp-content\/uploads\/2026\/09\/Ultra-Jewels-Luxury-Avenue-Los-Cabos.webp',\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/ultrajewels-luxury-avenue-los-cabos\/',\r\n      lat: 22.8869904,\r\n      lng: -109.9115011\r\n    },\r\n    {\r\n      id: 7,\r\n      city: 'monterrey',\r\n      name: 'ULTRAJEWELS MONTERREY',\r\n      address: 'Calz. del Valle 409, Del Valle, 66220 San Pedro Garza Garc\u00eda, N.L.',\r\n      image: 'https:\/\/ultrajewels.com\/wp-content\/uploads\/2026\/04\/ULTRAJEWELS-1.webp',\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/ultrajewels-monterrey\/',\r\n      lat: 25.654571,\r\n      lng: -100.3645749\r\n    },\r\n    {\r\n      id: 8,\r\n      city: 'cancun',\r\n      name: 'TAG Heuer Canc\u00fan',\r\n      address: 'Plaza la Isla, Km 12, Blvd. Kukulc\u00e1n, Zona Hotelera, 77500 Canc\u00fan, Q.R.',\r\n      image: 'https:\/\/ultrajewels.com\/wp-content\/uploads\/2026\/01\/1-1-1-scaled.jpg',\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/tag-heuer-la-isla-cancun\/',\r\n      lat: 21.1084681,\r\n      lng: -86.7640753\r\n    },\r\n    {\r\n      id: 9,\r\n      city: 'cabos',\r\n      name: 'TAG Heuer Cabo San Lucas',\r\n      address: 'Luxury Avenue Los Cabos, Av. L\u00e1zaro C\u00e1rdenas y Paseo Cabo Bello, Plaza Puerto Para\u00edso, 23410 Cabo San Lucas, B.C.S.',\r\n      image: 'https:\/\/ultrajewels.com\/wp-content\/uploads\/2025\/03\/upscalemedia-transformed-2.png',\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/tag-heuer-cabo-san-lucas\/',\r\n      lat: 22.8869097,\r\n      lng: -109.9114938\r\n    },\r\n    {\r\n      id: 10,\r\n      city: 'merida',\r\n      name: 'Montblanc M\u00e9rida',\r\n      address: 'Av. 24 Tab 30020 X 88 Colegio Teresiano La Isla Cabo Norte, 97345 M\u00e9rida, Yuc.',\r\n      image: 'https:\/\/ultrajewels.com\/wp-content\/uploads\/2025\/03\/Montblanc-Merida-scaled-2.jpg',\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/montblanc-merida\/',\r\n      lat: 21.0561448,\r\n      lng: -89.5990573\r\n    },\r\n    {\r\n      id: 11,\r\n      city: 'cancun',\r\n      name: 'Montblanc Marina Puerto Cancun',\r\n      address: 'Marina Puerto Canc\u00fan, 77500 Canc\u00fan, Q.R.',\r\n      image: 'https:\/\/ultrajewels.com\/wp-content\/uploads\/2026\/07\/UJ-2026_julio-fachada_montblanc-1.jpg-scaled.jpeg',\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/montblanc-cancun\/',\r\n      lat: 21.1607742,\r\n      lng: -86.8080823\r\n    },\r\n    {\r\n      id: 12,\r\n      city: 'cabos',\r\n      name: 'Montblanc Cabo San Lucas',\r\n      address: 'Blvd. L\u00e1zaro C\u00e1rdenas, El Medano Ejidal, Marina, 23479 Cabo San Lucas, B.C.S.',\r\n      image: 'https:\/\/ultrajewels.com\/wp-content\/uploads\/2025\/03\/Montblanc-Los-Cabos-scaled-1.jpg',\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/montblanc-cabo-san-lucas\/',\r\n      lat: 22.8904782,\r\n      lng: -109.9269251\r\n    },\r\n    {\r\n      id: 18,\r\n      city: 'cabos',\r\n      name: 'TAG Heuer Anima Los Cabos',\r\n      address: 'M\u00e9xico 1 Km 10.3, Tourist Corridor, Del Sol, 23455 Cabo San Lucas, B.C.S.',\r\n      image: 'https:\/\/ultrajewels.com\/wp-content\/uploads\/2026\/08\/WhatsApp-Image-2026-08-10-at-13.12.19.jpeg',\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/tag-heuer-anima-los-cabos\/',\r\n      lat: 22.9222496,\r\n      lng: -109.8369046\r\n    },\r\n    {\r\n      id: 13,\r\n      city: 'cancun',\r\n      name: 'Cartier Canc\u00fan',\r\n      address: 'Blvd. Kukulc\u00e1n KM 12, La Isla Canc\u00fan, Local S 21, Zona Hotelera, 77500 Canc\u00fan, Q.R.',\r\n      image: 'https:\/\/ultrajewels.com\/wp-content\/uploads\/2025\/08\/Cartier-Boutique-La-Isla-CUN-2025-14-scaled.jpg',\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/cartier-la-isla-cancun\/',\r\n      lat: 21.1121563,\r\n      lng: -86.7621965\r\n    },\r\n    {\r\n      id: 14,\r\n      city: 'cancun',\r\n      name: 'Hublot Canc\u00fan',\r\n      address: '5 Lt 18-10, Blvd. Kukulc\u00e1n km 12.5, Zona Hotelera, 77500 Canc\u00fan, Q.R.',\r\n      image: 'https:\/\/ultrajewels.com\/wp-content\/uploads\/2024\/12\/Hublot-Boutique-Cancun-Ultrajewels-La-Isla-16.jpg',\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/hublot-la-isla-cancun\/',\r\n      lat: 21.1095337,\r\n      lng: -86.7640945\r\n    },\r\n    {\r\n      id: 15,\r\n      city: 'cabos',\r\n      name: 'Breitling Cabo San Lucas',\r\n      address: 'Blvd. Paseo de la Marina Down Town, Supermanzana esquina, Centro Malec\u00f3n, 23453 Cabo San Lucas, B.C.S.',\r\n      image: 'https:\/\/ultrajewels.com\/wp-content\/uploads\/2025\/03\/Breitling-Los-Cabos-scaled-1.jpg',\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/breitling-cabo-san-lucas\/',\r\n      lat: 22.8854665,\r\n      lng: -109.9140861\r\n    },\r\n    {\r\n      id: 16,\r\n      city: 'cancun',\r\n      name: 'Breitling Boutique La Isla Canc\u00fan',\r\n      address: 'Local S-10 5, Blvd. Kukulc\u00e1n 10-km 12.5, Zona Hotelera, 77500 Canc\u00fan, Q.R.',\r\n      image: 'https:\/\/ultrajewels.com\/wp-content\/uploads\/2025\/08\/DSC_9796-Mejorado-NR-copia1-scaled-1.webp',\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/breitling-la-isla-cancun\/',\r\n      lat: 21.1102072,\r\n      lng: -86.7639903\r\n    },\r\n    {\r\n      id: 17,\r\n      city: 'cancun',\r\n      name: 'Breitling Marina Puerto Canc\u00fan',\r\n      address: 'Marina Puerto Canc\u00fan, 77500 Canc\u00fan, Q.R.',\r\n      image: 'https:\/\/ultrajewels.com\/wp-content\/uploads\/2026\/07\/Fachada-Breitling.png',\r\n      url: 'https:\/\/ultrajewels.com\/en\/boutiques\/breitling-puerto-cancun\/',\r\n      lat: 21.160552,\r\n      lng: -86.8091696\r\n    }\r\n  ];\r\n\r\n  let currentCity = 'todos';\r\n  let selectedStoreId = null;\r\n  const sliderIndices = {};\r\n\r\n  const frame = document.getElementById('ujMapFrame');\r\n  const storesList = document.getElementById('storesList');\r\n  const resetBtn = document.getElementById('resetMapBtn');\r\n\r\n  if (!frame || !storesList || !resetBtn) return;\r\n  if (frame.dataset.initialized === 'true') return;\r\n  frame.dataset.initialized = 'true';\r\n\r\n  function post(msg) {\r\n    if (frame && frame.contentWindow) frame.contentWindow.postMessage(msg, '*');\r\n  }\r\n\r\n  function getBrandAndLocation(name) {\r\n    let brand = 'ULTRAJEWELS';\r\n    let location = name;\r\n\r\n    if (name.includes('ULTRAJEWELS')) {\r\n      location = name.replace('ULTRAJEWELS ', '');\r\n    } else if (name.includes('TAG Heuer')) {\r\n      brand = 'TAG HEUER';\r\n      location = name.replace('TAG Heuer ', '');\r\n    } else if (name.includes('Montblanc')) {\r\n      brand = 'MONTBLANC';\r\n      location = name.replace('Montblanc ', '');\r\n    } else if (name.includes('Cartier')) {\r\n      brand = 'CARTIER';\r\n      location = name.replace('Cartier ', '');\r\n    } else if (name.includes('Hublot')) {\r\n      brand = 'HUBLOT';\r\n      location = name.replace('Hublot ', '');\r\n    } else if (name.includes('Breitling')) {\r\n      brand = 'BREITLING';\r\n      location = name.replace('Breitling ', '');\r\n    }\r\n\r\n    return { brand, location };\r\n  }\r\n\r\n  function setResetVisibility() {\r\n    const shouldShow = selectedStoreId || currentCity !== 'todos';\r\n    resetBtn.style.display = shouldShow ? 'inline-block' : 'none';\r\n  }\r\n\r\n  function highlightCard(id, skipScroll) {\r\n    document.querySelectorAll('.uj-guard .store-card').forEach(function (card) {\r\n      const active = parseInt(card.dataset.storeId) === id;\r\n      card.classList.toggle('active', active);\r\n\r\n      if (active && !skipScroll && window.innerWidth > 968) {\r\n        setTimeout(function () {\r\n          card.scrollIntoView({ behavior: 'smooth', block: 'center', inline: 'nearest' });\r\n        }, 150);\r\n      }\r\n    });\r\n  }\r\n\r\n  function renderStores() {\r\n    const filtered = currentCity === 'todos'\r\n      ? stores\r\n      : stores.filter(function (s) { return s.city === currentCity; });\r\n\r\n    if (!filtered.length) {\r\n      storesList.innerHTML = '<div class=\"no-stores\">No stores available.<\/div>';\r\n      return;\r\n    }\r\n\r\n    storesList.innerHTML = filtered.map(function (store) {\r\n      const data = getBrandAndLocation(store.name);\r\n      const imgs = store.images || [store.image];\r\n\r\n      if (sliderIndices[store.id] === undefined) {\r\n        sliderIndices[store.id] = 0;\r\n      }\r\n\r\n      const buttons = imgs.length > 1\r\n        ? '<button class=\"slider-btn prev\" data-store=\"' + store.id + '\" data-dir=\"-1\">\u276e<\/button>' +\r\n          '<button class=\"slider-btn next\" data-store=\"' + store.id + '\" data-dir=\"1\">\u276f<\/button>'\r\n        : '';\r\n\r\n      const slidesHTML = imgs.map(function (src) {\r\n        return '<img decoding=\"async\" src=\"' + src + '\" class=\"store-image\" draggable=\"false\">';\r\n      }).join('');\r\n\r\n      return `\r\n        <div class=\"store-card ${selectedStoreId === store.id ? 'active' : ''}\" data-store-id=\"${store.id}\">\r\n          <div class=\"slider-wrapper\">\r\n            <div class=\"slider-track\" id=\"track-${store.id}\">${slidesHTML}<\/div>\r\n            ${buttons}\r\n          <\/div>\r\n          <div class=\"store-info\">\r\n            <div class=\"store-brand\">${data.brand}<\/div>\r\n            <div class=\"store-location\">${data.location}<\/div>\r\n            <div class=\"store-address\">${store.address}<\/div>\r\n            <div class=\"store-actions\">\r\n              <a class=\"btn-detail\" href=\"${store.url}\" target=\"_blank\">View Boutique<\/a>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      `;\r\n    }).join('');\r\n\r\n    document.querySelectorAll('.uj-guard .store-card').forEach(function (card) {\r\n      card.addEventListener('click', function (e) {\r\n        if (e.target.closest('.slider-btn') || e.target.closest('.btn-detail')) return;\r\n\r\n        const id = parseInt(card.dataset.storeId);\r\n        const isMobile = window.innerWidth <= 968;\r\n\r\n        selectedStoreId = id;\r\n        highlightCard(id, isMobile);\r\n        setResetVisibility();\r\n        post({ type: 'selectStore', id: id });\r\n\r\n        if (isMobile) {\r\n          setTimeout(function () {\r\n            const mapSection = document.querySelector('.uj-guard .map-section');\r\n            const yOffset = -20;\r\n            const y = mapSection.getBoundingClientRect().top + window.pageYOffset + yOffset;\r\n            window.scrollTo({ top: y, behavior: 'smooth' });\r\n          }, 150);\r\n        }\r\n      });\r\n    });\r\n\r\n    document.querySelectorAll('.uj-guard .slider-btn').forEach(function (btn) {\r\n      btn.addEventListener('click', function (e) {\r\n        e.stopPropagation();\r\n        e.preventDefault();\r\n        moveSlide(parseInt(this.dataset.store), parseInt(this.dataset.dir));\r\n      });\r\n    });\r\n  }\r\n\r\n  function moveSlide(storeId, direction) {\r\n    const store = stores.find(function (s) { return s.id === storeId; });\r\n    if (!store) return;\r\n\r\n    const imgs = store.images || [store.image];\r\n    if (!imgs || imgs.length <= 1) return;\r\n\r\n    let current = sliderIndices[storeId];\r\n    let next = current + direction;\r\n    if (next < 0) next = imgs.length - 1;\r\n    if (next >= imgs.length) next = 0;\r\n    sliderIndices[storeId] = next;\r\n\r\n    const track = document.getElementById('track-' + storeId);\r\n    if (track && track.parentElement) {\r\n      const slideWidth = track.parentElement.offsetWidth;\r\n      track.style.transform = 'translateX(-' + next * slideWidth + 'px)';\r\n    }\r\n  }\r\n\r\n  function setupResetButton() {\r\n    resetBtn.addEventListener('click', function () {\r\n      selectedStoreId = null;\r\n      currentCity = 'todos';\r\n\r\n      document.querySelectorAll('.uj-guard .store-card').forEach(function (card) {\r\n        card.classList.remove('active');\r\n      });\r\n      document.querySelectorAll('.uj-guard .city-tab').forEach(function (tab) {\r\n        tab.classList.remove('active');\r\n      });\r\n\r\n      renderStores();\r\n      setResetVisibility();\r\n      post({ type: 'reset' });\r\n    });\r\n  }\r\n\r\n  function setupEventListeners() {\r\n    document.querySelectorAll('.uj-guard .city-tab').forEach(function (tab) {\r\n      tab.addEventListener('click', function () {\r\n        document.querySelectorAll('.uj-guard .city-tab').forEach(function (t) {\r\n          t.classList.remove('active');\r\n        });\r\n        this.classList.add('active');\r\n\r\n        currentCity = this.dataset.city;\r\n        selectedStoreId = null;\r\n\r\n        renderStores();\r\n        setResetVisibility();\r\n        post({ type: 'filterCity', city: currentCity });\r\n      });\r\n    });\r\n  }\r\n\r\n  \/\/ Mensajes que llegan desde el iframe (click en un marcador)\r\n  window.addEventListener('message', function (event) {\r\n    if (!event.data || event.source !== frame.contentWindow) return;\r\n\r\n    if (event.data.type === 'ready') {\r\n      post({ type: 'init', stores: stores });\r\n      return;\r\n    }\r\n\r\n    if (event.data.type === 'markerClick') {\r\n      selectedStoreId = event.data.id;\r\n      highlightCard(event.data.id, false);\r\n      setResetVisibility();\r\n    }\r\n  });\r\n\r\n  \/\/ Documento independiente que corre DENTRO del iframe: aislado del CSS\/JS\r\n  \/\/ de la p\u00e1gina anfitriona (Elementor, animaciones, smooth-scroll, etc.).\r\n  \/\/ Esto es lo que evita que los pines queden desalineados de los tiles.\r\n  const frameDoc = `<!DOCTYPE html>\r\n<html>\r\n<head>\r\n<meta charset=\"utf-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\">\r\n<style>\r\n  html, body { margin:0; padding:0; width:100%; height:100%; }\r\n  #map { width:100%; height:100%; z-index:1; }\r\n\r\n  .leaflet-popup-content-wrapper { border-radius:4px; box-shadow:0 10px 30px rgba(0,0,0,0.15); }\r\n  .leaflet-popup-content { margin:0; font-family:'Montserrat',sans-serif; }\r\n  .leaflet-control-attribution { font-size:10px; }\r\n\r\n  .custom-marker {\r\n    width: 20px;\r\n    height: 20px;\r\n    background: #EF922E;\r\n    border-radius: 50% 50% 50% 0;\r\n    transform: rotate(-45deg);\r\n    position: relative;\r\n  }\r\n  .custom-marker::after {\r\n    content: \"\";\r\n    width: 7px;\r\n    height: 7px;\r\n    background: #fff;\r\n    position: absolute;\r\n    border-radius: 50%;\r\n    top: 6px;\r\n    left: 6px;\r\n  }\r\n<\/style>\r\n<\/head>\r\n<body>\r\n<div id=\"map\"><\/div>\r\n<script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\"><\\\/script>\r\n<script>\r\n  let map, markerById = new Map(), stores = [], currentPopup = null;\r\n  let initialCenter = [23.0, -102.0], initialZoom = 5;\r\n\r\n  const customIcon = L.divIcon({\r\n    className: '',\r\n    html: '<div class=\"custom-marker\"><\/div>',\r\n    iconSize: [30, 30],\r\n    iconAnchor: [15, 30],\r\n    popupAnchor: [0, -30]\r\n  });\r\n\r\n  function getBrandAndLocation(name){\r\n    let brand = 'ULTRAJEWELS';\r\n    let location = name;\r\n    if (name.includes('ULTRAJEWELS')) { location = name.replace('ULTRAJEWELS ', ''); }\r\n    else if (name.includes('TAG Heuer')) { brand = 'TAG HEUER'; location = name.replace('TAG Heuer ', ''); }\r\n    else if (name.includes('Montblanc')) { brand = 'MONTBLANC'; location = name.replace('Montblanc ', ''); }\r\n    else if (name.includes('Cartier')) { brand = 'CARTIER'; location = name.replace('Cartier ', ''); }\r\n    else if (name.includes('Hublot')) { brand = 'HUBLOT'; location = name.replace('Hublot ', ''); }\r\n    else if (name.includes('Breitling')) { brand = 'BREITLING'; location = name.replace('Breitling ', ''); }\r\n    return { brand: brand, location: location };\r\n  }\r\n\r\n  function initMap(){\r\n    map = L.map('map', {\r\n      center: initialCenter,\r\n      zoom: initialZoom,\r\n      scrollWheelZoom: true,\r\n      worldCopyJump: true,\r\n      maxBounds: [[-85, -180], [85, 180]],\r\n      maxBoundsViscosity: 1.0\r\n    });\r\n\r\n    L.tileLayer('https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png', {\r\n      maxZoom: 19,\r\n      attribution: '&copy; OpenStreetMap contributors'\r\n    }).addTo(map);\r\n  }\r\n\r\n  function addMarkers(){\r\n    stores.forEach(function(s){\r\n      if(!s.lat || !s.lng) return;\r\n      const marker = L.marker([s.lat, s.lng], { icon: customIcon, title: s.name }).addTo(map);\r\n      marker.on('click', function(){\r\n        openInfo(s.id);\r\n        parent.postMessage({ type: 'markerClick', id: s.id }, '*');\r\n      });\r\n      markerById.set(s.id, marker);\r\n    });\r\n  }\r\n\r\n  function openInfo(id){\r\n    const s = stores.find(function(x){ return x.id === id; });\r\n    const m = markerById.get(id);\r\n    if(!s || !m) return;\r\n\r\n    const data = getBrandAndLocation(s.name);\r\n\r\n    const html =\r\n      '<div style=\"width:260px;padding:16px;font-family:\\\\'Montserrat\\\\',sans-serif;text-align:left;\">' +\r\n        '<div style=\"font-size:10px;color:#EF922E;font-weight:700;text-transform:uppercase;\">' + data.brand + '<\/div>' +\r\n        '<div style=\"font-size:13px;font-weight:600;color:#222;margin-bottom:8px;text-transform:uppercase;\">' + data.location + '<\/div>' +\r\n        '<div style=\"font-size:11px;color:#666;margin-bottom:12px;line-height:1.4;\">' + s.address + '<\/div>' +\r\n        '<a href=\"https:\/\/www.google.com\/maps\/dir\/?api=1&destination=' + s.lat + ',' + s.lng + '\" target=\"_blank\" style=\"display:inline-block;background:#EF922E;color:white;text-decoration:none;font-size:10px;font-weight:700;padding:6px 12px;border-radius:99px;text-transform:uppercase;\">Get directions<\/a>' +\r\n      '<\/div>';\r\n\r\n    m.bindPopup(html, { closeButton: true, autoPan: true }).openPopup();\r\n    currentPopup = m;\r\n  }\r\n\r\n  function updateMarkersVisibility(city){\r\n    stores.forEach(function(s){\r\n      const marker = markerById.get(s.id);\r\n      if(!marker) return;\r\n      const shouldShow = city === 'todos' || s.city === city;\r\n      const hasLayer = map.hasLayer(marker);\r\n      if(shouldShow && !hasLayer) marker.addTo(map);\r\n      if(!shouldShow && hasLayer) map.removeLayer(marker);\r\n    });\r\n  }\r\n\r\n  function fitAllStores(){\r\n    const coords = stores.filter(function(s){ return s.lat && s.lng; }).map(function(s){ return [s.lat, s.lng]; });\r\n    if(!coords.length) return;\r\n    map.fitBounds(L.latLngBounds(coords), { padding: [40, 40] });\r\n    setTimeout(function(){ initialCenter = map.getCenter(); initialZoom = map.getZoom(); }, 300);\r\n  }\r\n\r\n  function fitCity(city){\r\n    const coords = stores.filter(function(s){ return s.city === city && s.lat && s.lng; }).map(function(s){ return [s.lat, s.lng]; });\r\n    if(!coords.length) return;\r\n    if(coords.length === 1) map.setView(coords[0], 15);\r\n    else map.fitBounds(L.latLngBounds(coords), { padding: [40, 40] });\r\n    setTimeout(function(){ map.invalidateSize(); }, 300);\r\n  }\r\n\r\n  window.addEventListener('message', function(event){\r\n    const data = event.data;\r\n    if(!data || !data.type) return;\r\n\r\n    if(data.type === 'init'){\r\n      stores = data.stores || [];\r\n      addMarkers();\r\n      fitAllStores();\r\n      setTimeout(function(){ map.invalidateSize(); fitAllStores(); }, 300);\r\n      setTimeout(function(){ map.invalidateSize(); }, 1000);\r\n      return;\r\n    }\r\n    if(data.type === 'filterCity'){\r\n      if(currentPopup) currentPopup.closePopup();\r\n      updateMarkersVisibility(data.city);\r\n      if(data.city === 'todos') fitAllStores(); else fitCity(data.city);\r\n      return;\r\n    }\r\n    if(data.type === 'selectStore'){\r\n      const s = stores.find(function(x){ return x.id === data.id; });\r\n      if(s && s.lat && s.lng) map.setView([s.lat, s.lng], 15, { animate: true });\r\n      openInfo(data.id);\r\n      return;\r\n    }\r\n    if(data.type === 'reset'){\r\n      if(currentPopup) currentPopup.closePopup();\r\n      updateMarkersVisibility('todos');\r\n      fitAllStores();\r\n      return;\r\n    }\r\n  });\r\n\r\n  initMap();\r\n  window.addEventListener('load', function(){\r\n    setTimeout(function(){ map.invalidateSize(); parent.postMessage({ type: 'ready' }, '*'); }, 100);\r\n  });\r\n<\\\/script>\r\n<\/body>\r\n<\/html>`;\r\n\r\n  frame.srcdoc = frameDoc;\r\n\r\n  renderStores();\r\n  setupEventListeners();\r\n  setupResetButton();\r\n  setResetVisibility();\r\n})();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e7a1c05 elementor-widget__width-inherit elementor-widget elementor-widget-shortcode\" data-id=\"e7a1c05\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><p class=\"uj-no-events\">Sin experiencias pr\u00f3ximas.<\/p><\/div>\n\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>OUR BOUTIQUES \u2190 Ver todo CANC\u00daN PLAYA DEL CARMEN LOS CABOS MONTERREY M\u00c9RIDA<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-164992","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/ultrajewels.com\/en\/wp-json\/wp\/v2\/pages\/164992","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ultrajewels.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ultrajewels.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ultrajewels.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ultrajewels.com\/en\/wp-json\/wp\/v2\/comments?post=164992"}],"version-history":[{"count":5,"href":"https:\/\/ultrajewels.com\/en\/wp-json\/wp\/v2\/pages\/164992\/revisions"}],"predecessor-version":[{"id":165011,"href":"https:\/\/ultrajewels.com\/en\/wp-json\/wp\/v2\/pages\/164992\/revisions\/165011"}],"wp:attachment":[{"href":"https:\/\/ultrajewels.com\/en\/wp-json\/wp\/v2\/media?parent=164992"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}