{"id":86872,"date":"2026-04-20T09:16:03","date_gmt":"2026-04-20T08:16:03","guid":{"rendered":"https:\/\/ejuniper.com\/?page_id=86872"},"modified":"2026-07-20T16:58:28","modified_gmt":"2026-07-20T14:58:28","slug":"clients","status":"publish","type":"page","link":"https:\/\/ejuniper.com\/en\/clients\/","title":{"rendered":"clients"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"86872\" class=\"elementor elementor-86872\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-754ed73 e-con-full e-flex e-con e-parent\" data-id=\"754ed73\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-1a48b86 e-con-full e-flex e-con e-child\" data-id=\"1a48b86\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-7705ede e-con-full e-flex e-con e-child\" data-id=\"7705ede\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f738c8c elementor-widget elementor-widget-heading\" data-id=\"f738c8c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Clients<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7a649c0 elementor-widget elementor-widget-text-editor\" data-id=\"7a649c0\" 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>We have a strong <strong>global presence,<\/strong> serving more than<strong>\u00a0550 Clients<\/strong>\u00a0in over\u00a0<strong>50 countries worldwide<\/strong>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e0c427 elementor-widget elementor-widget-text-editor\" data-id=\"4e0c427\" 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>Are you a Client?<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-380a48f elementor-widget elementor-widget-text-editor\" data-id=\"380a48f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<ul><li>Access to an extensive network of <strong>global sellers<\/strong> for sourcing travel products and a diverse pool of <strong>international buyers<\/strong> eager to connect.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1f9eceb e-con-full e-flex e-con e-child\" data-id=\"1f9eceb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-89fb153 simply-link elementor-widget elementor-widget-heading\" data-id=\"89fb153\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<p class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/ejuniper.com\/en\/sellers\/\">Access our network of Sellers<\/a><\/p>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d5501f1 simply-link elementor-widget elementor-widget-heading\" data-id=\"d5501f1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<p class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/ejuniper.com\/en\/buyers\/\">Meet our Buyers<\/a><\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-524425e e-con-full e-flex e-con e-child\" data-id=\"524425e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-96054f2 e-con-full e-flex e-con e-parent\" data-id=\"96054f2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-31621ea e-con-full e-flex e-con e-child\" data-id=\"31621ea\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e59d5f3 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"e59d5f3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n.clients-filters-wrap{\n  width:100%;\n  max-width:100%;\n  box-sizing:border-box;\n  font-family:\"Montserrat\",sans-serif;\n  margin-bottom:0;\n  display:block;\n}\n\n.clients-filters-grid{\n  display:grid;\n  grid-template-columns:repeat(4,minmax(0,1fr));\n  gap:16px;\n  align-items:end;\n  width:100%;\n}\n\n.filter-group{\n  display:flex;\n  flex-direction:column;\n  gap:8px;\n  min-width:0;\n  width:100%;\n}\n\n.filter-label{\n  font-size:16px;\n  font-weight:500;\n  color:#1d1e1b;\n  margin:0;\n}\n\n.clients-filters-wrap input[type=\"search\"],\n.clients-filters-wrap select{\n  display:block;\n  width:100%;\n  max-width:none;\n  min-width:0;\n  height:52px;\n  border:1px solid #e6e6e6;\n  border-radius:999px;\n  background:#fff;\n  background-clip:padding-box;\n  box-sizing:border-box;\n  font-family:\"Montserrat\",sans-serif;\n  font-size:14px;\n  color:#1d1e1b;\n  outline:none;\n  box-shadow:none;\n  appearance:none;\n  -webkit-appearance:none;\n  -moz-appearance:none;\n}\n\n.clients-filters-wrap input[type=\"search\"]:focus,\n.clients-filters-wrap select:focus{\n  border-color:rgba(8,59,160,0.35);\n  box-shadow:0 0 0 3px rgba(8,59,160,0.10), 0 0 10px 0 rgba(8,59,160,0.08);\n}\n\n.clients-filters-wrap input[type=\"search\"]{\n  padding:0 18px;\n}\n\n.clients-filters-wrap input[type=\"search\"]::placeholder{\n  color:#8d8d8d;\n  opacity:1;\n}\n\n.clients-filters-wrap input[type=\"search\"]::-webkit-search-decoration,\n.clients-filters-wrap input[type=\"search\"]::-webkit-search-cancel-button,\n.clients-filters-wrap input[type=\"search\"]::-webkit-search-results-button,\n.clients-filters-wrap input[type=\"search\"]::-webkit-search-results-decoration{\n  -webkit-appearance:none;\n}\n\n.clients-filters-wrap select{\n  padding:0 44px 0 18px;\n  background-image:url(\"data:image\/svg+xml;utf8,<svg xmlns='http:\/\/www.w3.org\/2000\/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%231d1e1b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'><\/polyline><\/svg>\");\n  background-repeat:no-repeat;\n  background-position:right 16px center;\n  background-size:16px;\n  cursor:pointer;\n}\n\n.clients-filters-wrap select::-ms-expand{\n  display:none;\n}\n\n@media (max-width:1024px){\n  .clients-filters-grid{\n    grid-template-columns:repeat(2,minmax(0,1fr));\n  }\n}\n\n@media (max-width:767px){\n  .clients-filters-grid{\n    grid-template-columns:1fr;\n  }\n}\n<\/style>\n\n<div class=\"clients-filters-wrap\">\n  <div class=\"clients-filters-grid\">\n\n    <div class=\"filter-group\">\n      <label class=\"filter-label\" for=\"clientsBusinessType\" id=\"clientsBusinessTypeLabel\"><\/label>\n      <select id=\"clientsBusinessType\">\n        <option value=\"\"><\/option>\n      <\/select>\n    <\/div>\n\n    <div class=\"filter-group\">\n      <label class=\"filter-label\" for=\"clientsPlatform\" id=\"clientsPlatformLabel\"><\/label>\n      <select id=\"clientsPlatform\">\n        <option value=\"\"><\/option>\n      <\/select>\n    <\/div>\n\n    <div class=\"filter-group\">\n      <label class=\"filter-label\" for=\"clientsCountry\" id=\"clientsCountryLabel\"><\/label>\n      <select id=\"clientsCountry\">\n        <option value=\"\"><\/option>\n      <\/select>\n    <\/div>\n    \n    <div class=\"filter-group\">\n      <div class=\"filter-label\" id=\"clientsSearchLabel\" style=\"visibility:hidden;\"><\/div>\n      <input type=\"search\" id=\"clientsSearch\" autocomplete=\"off\">\n    <\/div>\n    \n  <\/div>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d0ebad3 elementor-widget elementor-widget-html\" data-id=\"d0ebad3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n:root{\n  --text:#1d1e1b;\n  --shadow:0 0 10px 0 rgba(8,59,160,0.2);\n  --shadowHover:0 10px 20px 0 rgba(8,59,160,0.2);\n  --radius:32px;\n}\n\n.clients-wrap{\n  width:100%;\n  box-sizing:border-box;\n  font-family:\"Montserrat\",sans-serif;\n  color:var(--text);\n}\n\n.clients-status{\n  font-size:14px;\n  font-weight:600;\n  padding:12px 0;\n}\n\n\/* GRID *\/\n.clients-grid{\n  display:grid;\n  gap:24px;\n  align-items:stretch;\n  grid-auto-rows:auto;\n}\n\n@media (min-width:1200px){\n  .clients-grid{ grid-template-columns:repeat(4,1fr); }\n}\n\n@media (min-width:992px) and (max-width:1199.98px){\n  .clients-grid{ grid-template-columns:repeat(3,1fr); }\n}\n\n@media (min-width:768px) and (max-width:991.98px){\n  .clients-grid{ grid-template-columns:repeat(2,1fr); }\n}\n\n@media (max-width:767.98px){\n  .clients-grid{ grid-template-columns:1fr; }\n}\n\n\/* CARD *\/\n.clients-wrap .clients-grid > .client-card{\n  position:relative;\n  background:#fff;\n  border-radius:var(--radius);\n  box-shadow:var(--shadow) !important;\n  overflow:hidden;\n  display:flex;\n  flex-direction:column;\n  align-self:stretch;\n  transition:box-shadow .25s ease;\n  transform:translateZ(0);\n  cursor:pointer;\n  text-decoration:none !important;\n  color:inherit;\n}\n.clients-wrap .clients-grid > .client-card:hover{ box-shadow:var(--shadowHover) !important; }\n\n.client-card-inner{\n  height:100%;\n  display:flex;\n  flex-direction:column;\n}\n\n.client-img{\n  height:160px;\n  margin:16px 16px 0 16px;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  overflow:hidden;\n  box-sizing:border-box;\n}\n\n.client-img-logo{\n  display:block;\n  max-width:180px !important;\n  max-height:100px !important;\n  width:auto;\n  height:auto;\n  object-fit:contain;\n}\n\n.client-info{\n  padding:12px 24px 24px 24px;\n  min-height:180px;\n  display:flex;\n  flex-direction:column;\n  flex:1;\n}\n\n.client-name{\n  font-size:22px;\n  font-weight:600;\n  line-height:1.25;\n  margin:0;\n  color:var(--text);\n}\n\n.client-row{\n  display:flex;\n  align-items:center;\n  gap:8px;\n  margin-top:8px;\n}\n\n.client-meta{\n  font-size:12px;\n  font-weight:500;\n  margin:0;\n}\n\n.client-meta-wrap{\n  margin-top:auto;\n}\n\n.client-pill{\n  display:inline-block;\n  padding:4px 8px;\n  border-radius:4px;\n  border:1px solid #ebebeb;\n  font-size:12px;\n  font-weight:500;\n  margin-top:6px;\n  color:#ee0700;\n}\n\n.client-icon{\n  font-size:16px;\n  color:#d70000;\n}\n\n\/* CTA *\/\n.client-cta{\n  position:absolute;\n  top:16px;\n  left:16px;\n  height:32px;\n  width:32px;\n  background:#F0F4FF;\n  border-radius:999px;\n  display:flex;\n  align-items:center;\n  justify-content:flex-start;\n  overflow:hidden;\n  transition:width .3s ease;\n  pointer-events:none;\n}\n\n.client-cta-icon{\n  width:32px;\n  height:32px;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  flex-shrink:0;\n}\n\n.client-cta-icon .material-symbols-outlined{\n  font-size:16px;\n  color:#000;\n  display:block;\n  line-height:1;\n  font-variation-settings:\"wght\" 600;\n}\n\n.client-cta-text{\n  white-space:nowrap;\n  margin-left:8px;\n  margin-right:14px;\n  font-size:14px;\n  font-weight:600;\n  color:#000;\n  opacity:0;\n  transition:opacity .2s ease;\n}\n\n.client-card:hover .client-cta{ width:150px; }\n.client-card:hover .client-cta-text{ opacity:1; }\n\n\/* CLOSE *\/\n.client-close{ display:none; }\n.client-close .material-symbols-outlined{ font-size:22px; }\n\n\/* MODAL *\/\n.clients-modal-backdrop{\n  position:fixed;\n  inset:0;\n  z-index:99999;\n  display:flex;\n  justify-content:center;\n  align-items:center;\n  padding:40px;\n  background:rgba(0,0,0,0);\n  backdrop-filter:blur(0);\n  animation:clientsBackdropIn 900ms cubic-bezier(.16,1,.3,1) forwards;\n  overflow:auto;\n}\n\n@keyframes clientsBackdropIn{\n  to{\n    background:rgba(0,0,0,.28);\n    backdrop-filter:blur(6px);\n  }\n}\n\n.clients-modal{\n  width:min(960px,94vw);\n  background:#fff;\n  border-radius:36px;\n  box-shadow:0 40px 80px rgba(0,0,0,.35);\n  transform:translateX(120vw);\n  opacity:0;\n  animation:clientsModalSlideIn 1400ms cubic-bezier(.16,1,.3,1) forwards;\n}\n\n@keyframes clientsModalSlideIn{\n  0%{ transform:translateX(120vw); opacity:0; }\n  60%{ transform:translateX(20px); opacity:.95; }\n  100%{ transform:translateX(0); opacity:1; }\n}\n\n.clients-modal .client-card{\n  overflow:visible;\n  box-shadow:none;\n  border-radius:36px;\n  cursor:default;\n}\n\n.clients-modal .client-card-inner{\n  height:auto !important;\n}\n\n.clients-modal .client-cta{\n  display:none !important;\n}\n\n.clients-modal .client-close{\n  display:block !important;\n  position:absolute;\n  top:24px;\n  right:24px;\n  z-index:10;\n  cursor:pointer;\n}\n\n.clients-modal .client-img{\n  width:300px;\n  height:120px;\n  margin:0;\n  border-radius:16px;\n  border:1px solid #e5e5e5;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  overflow:hidden;\n  box-sizing:border-box;\n  padding:10px;\n}\n\n.clients-modal .client-img-logo{\n  max-width:100%;\n  max-height:100%;\n  width:auto;\n  height:auto;\n  object-fit:contain;\n}\n\n.clients-modal .client-info{\n  min-height:auto;\n  padding:0;\n  flex:0;\n  display:grid;\n  grid-template-rows:auto auto auto;\n  row-gap:16px;\n}\n\n.clients-modal .client-meta-wrap{\n  margin-top:0;\n}\n\n.client-description{\n  font-size:14px;\n  line-height:1.65;\n  color:#444;\n  margin:0;\n}\n\n.client-modal-actions{\n  display:flex;\n  gap:12px;\n  flex-wrap:wrap;\n}\n\n.client-readmore-btn{\n  display:inline-flex;\n  align-items:center;\n  justify-content:center;\n  min-height:48px;\n  padding:0 18px;\n  border-radius:999px;\n  background:#EE0700;\n  color:#fff !important;\n  text-decoration:none !important;\n  font-size:14px;\n  font-weight:600;\n  transition:background .2s ease, transform .2s ease;\n}\n.client-readmore-btn:hover{\n  background:#CE0000;\n  transform:translateY(-1px);\n}\n\n@media (min-width:768px){\n  .clients-modal .client-card-inner{\n    display:grid;\n    grid-template-columns:300px 1fr;\n    gap:24px;\n    padding:24px;\n  }\n}\n\n@media (max-width:767px){\n  .clients-modal-backdrop{\n    padding:16px;\n  }\n  .clients-modal .client-card-inner{\n    display:flex;\n    flex-direction:column;\n    gap:16px;\n    padding:24px;\n  }\n  .clients-modal .client-img{\n    display:none;\n  }\n}\n\n.clients-filters-wrap select,\n.clients-filters-wrap input{\n  flex:1 1 auto;\n  max-width:none !important;\n}\n<\/style>\n\n<div class=\"clients-wrap\">\n  <div id=\"clientsStatus\" class=\"clients-status\">Loading\u2026<\/div>\n  <div id=\"clientsGrid\" class=\"clients-grid\"><\/div>\n<\/div>\n\n<script>\n(async function () {\n  const DATA_URL = \"https:\/\/ejuniper.com\/json\/clients\/clients-list.json\";\n  const CLIENT_MODAL_ENABLED = false; \/\/ Cambiar a true para recuperar la modal.\n\nconst statusEl = document.getElementById(\"clientsStatus\");\nconst gridEl   = document.getElementById(\"clientsGrid\");\n\nconst searchEl         = document.getElementById(\"clientsSearch\");\nconst businessTypeEl   = document.getElementById(\"clientsBusinessType\");\nconst platformEl       = document.getElementById(\"clientsPlatform\");\nconst countryEl        = document.getElementById(\"clientsCountry\");\n\nconst businessTypeLabelEl = document.getElementById(\"clientsBusinessTypeLabel\");\nconst platformLabelEl     = document.getElementById(\"clientsPlatformLabel\");\nconst countryLabelEl      = document.getElementById(\"clientsCountryLabel\");\nconst searchLabelEl       = document.getElementById(\"clientsSearchLabel\");\n\nconst i18n = {\n  en: {\n    loading: \"Loading\u2026\",\n    noClients: \"No clients found.\",\n    readMore: \"Read more\",\n    all: \"All\",\n    businessTypeLabel: \"Choose your Business Type\",\n    platformLabel: \"Choose Juniper Platform\",\n    countryLabel: \"Choose Country\",\n    searchLabel: \"Search\",\n    searchPlaceholder: \"Search\"\n  },\n  es: {\n    loading: \"Cargando\u2026\",\n    noClients: \"No se han encontrado clientes.\",\n    readMore: \"Leer m\u00e1s\",\n    all: \"Todos\",\n    businessTypeLabel: \"Elije el Tipo de Empresa\",\n    platformLabel: \"Elije la Plataforma Juniper\",\n    countryLabel: \"Elije el Pa\u00eds\",\n    searchLabel: \"Buscar\",\n    searchPlaceholder: \"Buscar\"\n  }\n};\n\n\n  function getPageLang() {\n    const lang = (document.documentElement.lang || \"\").toLowerCase();\n    return lang.startsWith(\"es\") ? \"es\" : \"en\";\n  }\n\nfunction applyStaticTexts(lang) {\n  const t = i18n[lang];\n\n  if (statusEl) statusEl.textContent = t.loading;\n  if (businessTypeLabelEl) businessTypeLabelEl.textContent = t.businessTypeLabel;\n  if (platformLabelEl) platformLabelEl.textContent = t.platformLabel;\n  if (countryLabelEl) countryLabelEl.textContent = t.countryLabel;\n  if (searchLabelEl) searchLabelEl.textContent = t.searchLabel;\n  if (searchEl) searchEl.placeholder = t.searchPlaceholder;\n}\n\n  function getLangValue(val, lang) {\n    if (!val) return \"\";\n    if (typeof val === \"string\") return val;\n    return val[lang] || val.en || val.es || \"\";\n  }\n\n  function esc(s) {\n    return String(s ?? \"\")\n      .replace(\/&\/g, \"&amp;\")\n      .replace(\/<\/g, \"&lt;\")\n      .replace(\/>\/g, \"&gt;\")\n      .replace(\/\"\/g, \"&quot;\")\n      .replace(\/'\/g, \"&#039;\");\n  }\n\n  function stripHtml(html) {\n    const div = document.createElement(\"div\");\n    div.innerHTML = String(html || \"\");\n    return (div.textContent || div.innerText || \"\").replace(\/\\s+\/g, \" \").trim();\n  }\n\n  function norm(s) {\n    return String(s ?? \"\")\n      .toLowerCase()\n      .normalize(\"NFD\")\n      .replace(\/[\\u0300-\\u036f]\/g, \"\")\n      .trim();\n  }\n\n  function truncateWords(text, maxWords = 30) {\n    const clean = stripHtml(text);\n    if (!clean) return \"\";\n    const words = clean.split(\/\\s+\/);\n    if (words.length <= maxWords) return clean;\n    return words.slice(0, maxWords).join(\" \") + \"\u2026\";\n  }\n\nfunction uniqueSorted(values) {\n  return Array.from(new Set(values.filter(Boolean)))\n    .sort((a, b) => a.localeCompare(b, undefined, { sensitivity: \"base\" }));\n}\n\nfunction populateSelect(selectEl, values, allLabel = \"All\") {\n  if (!selectEl) return;\n\n  const currentValue = selectEl.value;\n  selectEl.innerHTML = \"\";\n\n  const allOption = document.createElement(\"option\");\n  allOption.value = \"\";\n  allOption.textContent = allLabel;\n  selectEl.appendChild(allOption);\n\n  values.forEach((value) => {\n    const option = document.createElement(\"option\");\n    option.value = value;\n    option.textContent = value;\n    selectEl.appendChild(option);\n  });\n\n  if ([...selectEl.options].some(opt => opt.value === currentValue)) {\n    selectEl.value = currentValue;\n  }\n}\n\nfunction buildFilterOptions(allClients, lang) {\n  const businessTypes = uniqueSorted(\n    allClients.map(client => getLangValue(client.tipo_cliente, lang).trim())\n  );\n\n  const platforms = uniqueSorted(\n    allClients.map(client => String(client.plataforma_contratada || \"\").trim())\n  );\n\n  const countries = uniqueSorted(\n    allClients.map(client => getLangValue(client.localizacion, lang).trim())\n  );\n\n  const allLabel = i18n[lang].all;\n\n  populateSelect(businessTypeEl, businessTypes, allLabel);\n  populateSelect(platformEl, platforms, allLabel);\n  populateSelect(countryEl, countries, allLabel);\n}\n  function resolveLogoUrl(item) {\n    return item.logo_src || \"\";\n  }\n\n  function buildClientForLang(client, lang) {\n    return {\n      ...client,\n      localizacion: getLangValue(client.localizacion, lang),\n      tipo_cliente: getLangValue(client.tipo_cliente, lang),\n      read_more_url: getLangValue(client.read_more_url, lang),\n      extracto: getLangValue(client.extracto, lang),\n      descripcion_completa: getLangValue(client.descripcion_completa, lang)\n    };\n  }\n\n  function renderCard(rawClient, lang) {\n    const client = buildClientForLang(rawClient, lang);\n\n    const card = document.createElement(\"a\");\n    card.className = \"client-card\";\n    card.href = `\/${lang}\/clients\/${encodeURIComponent(client.id || \"\")}\/`;\n    card.dataset.client = JSON.stringify(rawClient);\n    card.dataset.clientSlug = client.id || \"\";\n    card.setAttribute(\"aria-label\", `${client.nombre || \"Client\"} \u2013 ${i18n[lang].readMore}`);\n\n \n\n    card.innerHTML = `\n      <div class=\"client-card-inner\">\n        <div class=\"client-close\">\n          <span class=\"material-symbols-outlined\">close<\/span>\n        <\/div>\n\n        <div class=\"client-cta\">\n          <div class=\"client-cta-icon\">\n            <span class=\"material-symbols-outlined\">east<\/span>\n          <\/div>\n          <div class=\"client-cta-text\">${esc(i18n[lang].readMore)}<\/div>\n        <\/div>\n\n        <div class=\"client-img\">\n          ${resolveLogoUrl(client)\n            ? `<img loading=\"lazy\" class=\"client-img-logo\" src=\"${esc(resolveLogoUrl(client))}\" alt=\"${esc(lang === \"es\" ? `${client.nombre || \"Cliente\"} - cliente de Juniper` : `${client.nombre || \"Client\"} - Juniper client`)}\" width=\"180\" height=\"100\" loading=\"lazy\" decoding=\"async\">`\n            : ``\n          }\n        <\/div>\n\n        <div class=\"client-info\">\n          <div>\n            <div class=\"client-name\">${esc(client.nombre || \"\")}<\/div>\n            ${client.tipo_cliente ? `<div class=\"client-pill\">${esc(client.tipo_cliente)}<\/div>` : \"\"}\n\n          <\/div>\n\n          <div class=\"client-meta-wrap\">\n            ${client.localizacion ? `\n              <div class=\"client-row\">\n                <span class=\"material-symbols-outlined client-icon\">public<\/span>\n                <p class=\"client-meta\">${esc(client.localizacion)}<\/p>\n              <\/div>\n            ` : \"\"}\n\n            ${client.plataforma_contratada ? `\n              <div class=\"client-row\">\n                <span class=\"material-symbols-outlined client-icon\">deployed_code<\/span>\n                <p class=\"client-meta\">${esc(client.plataforma_contratada)}<\/p>\n              <\/div>\n            ` : \"\"}\n          <\/div>\n        <\/div>\n      <\/div>\n    `;\n    return card;\n  }\n\n  function renderClients(list, lang) {\n    gridEl.innerHTML = \"\";\n\n    list.forEach((client) => {\n      gridEl.appendChild(renderCard(client, lang));\n    });\n\n    statusEl.textContent = list.length ? \"\" : i18n[lang].noClients;\n    equalizeCardHeights();\n  }\n\n  function equalizeCardHeights() {\n    const cards = Array.from(gridEl.querySelectorAll(\".client-card\"));\n    if (!cards.length) return;\n    cards.forEach((c) => c.style.height = \"auto\");\n    let max = 0;\n    cards.forEach((c) => { max = Math.max(max, c.offsetHeight); });\n    cards.forEach((c) => { c.style.height = max + \"px\"; });\n  }\n\n  let modalBackdrop = null;\n\n  function closeModal() {\n    if (!modalBackdrop) return;\n    modalBackdrop.remove();\n    modalBackdrop = null;\n  }\n\n  function openModal(rawClient, lang) {\n    const client = buildClientForLang(rawClient, lang);\n    closeModal();\n\n    modalBackdrop = document.createElement(\"div\");\n    modalBackdrop.className = \"clients-modal-backdrop\";\n\n    const modal = document.createElement(\"div\");\n    modal.className = \"clients-modal\";\n\n    modal.innerHTML = `\n      <div class=\"client-card\">\n        <div class=\"client-card-inner\">\n          <div class=\"client-close\">\n            <span class=\"material-symbols-outlined\">close<\/span>\n          <\/div>\n\n          <div class=\"client-img\">\n              ${resolveLogoUrl(client)\n                ? `<img loading=\"lazy\" class=\"client-img-logo\" src=\"${esc(resolveLogoUrl(client))}\" alt=\"${esc(lang === \"es\" ? `${client.nombre || \"Cliente\"} - cliente de Juniper` : `${client.nombre || \"Client\"} - Juniper client`)}\" width=\"180\" height=\"100\" loading=\"lazy\" decoding=\"async\">`\n                : ``\n              }\n            <\/div>\n\n          <div class=\"client-info\">\n            <div>\n              <div class=\"client-name\">${esc(client.nombre || \"\")}<\/div>\n              ${client.tipo_cliente ? `<div class=\"client-pill\">${esc(client.tipo_cliente)}<\/div>` : \"\"}\n            <\/div>\n\n            <div class=\"client-meta-wrap\">\n              ${client.localizacion ? `\n                <div class=\"client-row\">\n                  <span class=\"material-symbols-outlined client-icon\">public<\/span>\n                  <p class=\"client-meta\">${esc(client.localizacion)}<\/p>\n                <\/div>\n              ` : \"\"}\n\n              ${client.plataforma_contratada ? `\n                <div class=\"client-row\">\n                  <span class=\"material-symbols-outlined client-icon\">deployed_code<\/span>\n                  <p class=\"client-meta\">${esc(client.plataforma_contratada)}<\/p>\n                <\/div>\n              ` : \"\"}\n            <\/div>\n\n            ${client.descripcion_completa ? `\n              <div class=\"client-description\">${esc(client.descripcion_completa).replace(\/\\n\/g, \"<br>\")}<\/div>\n            ` : \"\"}\n          <\/div>\n        <\/div>\n      <\/div>\n    `;\n\n    modalBackdrop.appendChild(modal);\n    document.body.appendChild(modalBackdrop);\n\n    modalBackdrop.addEventListener(\"click\", (e) => {\n      if (e.target === modalBackdrop) closeModal();\n    });\n\n    modal.addEventListener(\"click\", (e) => {\n      e.stopPropagation();\n      const closeBtn = e.target.closest(\".client-close\");\n      if (closeBtn) closeModal();\n    });\n  }\n\n  try {\n    const r = await fetch(DATA_URL, { cache: \"no-store\" });\n    if (!r.ok) throw new Error(\"HTTP \" + r.status);\n\n    const data = await r.json();\n    const clients = Array.isArray(data.clients) ? data.clients.slice() : [];\n    const allClients = clients.slice();\n    const lang = getPageLang();\n\napplyStaticTexts(lang);\n\nbuildFilterOptions(allClients, lang);\nrenderClients(allClients, lang);\n\n    function buildHaystack(rawClient) {\n      const client = buildClientForLang(rawClient, lang);\n      return norm([\n        client.nombre,\n        client.localizacion,\n        client.extracto,\n        client.descripcion_completa,\n        client.tipo_cliente,\n        client.plataforma_contratada\n      ].filter(Boolean).join(\" \"));\n    }\n\nfunction applyFilters() {\n  const q = norm(searchEl?.value || \"\");\n  const selectedBusinessType = norm(businessTypeEl?.value || \"\");\n  const selectedPlatform = norm(platformEl?.value || \"\");\n  const selectedCountry = norm(countryEl?.value || \"\");\n\n  closeModal();\n\n  const filtered = allClients.filter((rawClient) => {\n    const client = buildClientForLang(rawClient, lang);\n\n    const matchesSearch = !q || buildHaystack(rawClient).includes(q);\n    const matchesBusinessType = !selectedBusinessType || norm(client.tipo_cliente).includes(selectedBusinessType);\n    const matchesPlatform = !selectedPlatform || norm(client.plataforma_contratada).includes(selectedPlatform);\n    const matchesCountry = !selectedCountry || norm(client.localizacion).includes(selectedCountry);\n\n    return matchesSearch && matchesBusinessType && matchesPlatform && matchesCountry;\n  });\n\n  renderClients(filtered, lang);\n}\n\nif (searchEl) {\n  searchEl.addEventListener(\"input\", applyFilters);\n  searchEl.addEventListener(\"search\", applyFilters);\n}\n\nif (businessTypeEl) {\n  businessTypeEl.addEventListener(\"change\", applyFilters);\n}\n\nif (platformEl) {\n  platformEl.addEventListener(\"change\", applyFilters);\n}\n\nif (countryEl) {\n  countryEl.addEventListener(\"change\", applyFilters);\n}\n\napplyFilters();\n\n    gridEl.addEventListener(\"click\", (e) => {\n      const card = e.target.closest(\".client-card\");\n      if (!card || !CLIENT_MODAL_ENABLED) return;\n\n      e.preventDefault();\n\n      try {\n        const rawClient = JSON.parse(card.dataset.client || \"{}\");\n        openModal(rawClient, lang);\n      } catch (err) {\n        console.error(\"Invalid client payload\", err);\n      }\n    });\n\n    window.addEventListener(\"keydown\", (e) => {\n      if (e.key === \"Escape\") closeModal();\n    });\n\n    let resizeTimer;\n    window.addEventListener(\"resize\", () => {\n      clearTimeout(resizeTimer);\n      resizeTimer = setTimeout(() => {\n        equalizeCardHeights();\n      }, 150);\n    });\n\n  } catch (e) {\n    statusEl.textContent = \"ERROR: \" + (e && e.message ? e.message : String(e));\n    console.error(e);\n  }\n})();\n<\/script>\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>Clients We have a strong global presence, serving more than\u00a0550 Clients\u00a0in over\u00a050 countries worldwide. Are you a Client? Access to an extensive network of global sellers for sourcing travel products and a diverse pool of international buyers eager to connect. Access our network of Sellers Meet our Buyers Clients Editor Loading\u2026<\/p>\n","protected":false},"author":55,"featured_media":92507,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"class_list":["post-86872","page","type-page","status-publish","has-post-thumbnail","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>clients Juniper Travel Technology<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ejuniper.com\/en\/clients\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"clients Juniper Travel Technology\" \/>\n<meta property=\"og:description\" content=\"Clients We have a strong global presence, serving more than\u00a0550 Clients\u00a0in over\u00a050 countries worldwide. Are you a Client? Access to an extensive network of global sellers for sourcing travel products and a diverse pool of international buyers eager to connect. Access our network of Sellers Meet our Buyers Clients Editor Loading\u2026\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ejuniper.com\/en\/clients\/\" \/>\n<meta property=\"og:site_name\" content=\"Juniper Travel Technology\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-20T14:58:28+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ejuniper.com\/wp-content\/uploads\/2026\/06\/tecla_optz.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"201\" \/>\n\t<meta property=\"og:image:height\" content=\"200\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"70 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/clients\\\/\",\"url\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/clients\\\/\",\"name\":\"clients Juniper Travel Technology\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/clients\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/clients\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ejuniper.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/tecla_optz.webp\",\"datePublished\":\"2026-04-20T08:16:03+00:00\",\"dateModified\":\"2026-07-20T14:58:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/clients\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ejuniper.com\\\/en\\\/clients\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/clients\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ejuniper.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/tecla_optz.webp\",\"contentUrl\":\"https:\\\/\\\/ejuniper.com\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/tecla_optz.webp\",\"width\":201,\"height\":200,\"caption\":\"tecla_optz\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/clients\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"clients\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/\",\"name\":\"https:\\\/\\\/ejuniper.com\\\/\",\"description\":\"Redefining Travel with Innovative Technology\",\"publisher\":{\"@id\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/#organization\",\"name\":\"Juniper Travel Technology\",\"url\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/ejuniper.com\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/juniper-2-1.svg\",\"contentUrl\":\"https:\\\/\\\/ejuniper.com\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/juniper-2-1.svg\",\"width\":48,\"height\":48,\"caption\":\"Juniper Travel Technology\"},\"image\":{\"@id\":\"https:\\\/\\\/ejuniper.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/company\\\/juniper\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"clients Juniper Travel Technology","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ejuniper.com\/en\/clients\/","og_locale":"en_US","og_type":"article","og_title":"clients Juniper Travel Technology","og_description":"Clients We have a strong global presence, serving more than\u00a0550 Clients\u00a0in over\u00a050 countries worldwide. Are you a Client? Access to an extensive network of global sellers for sourcing travel products and a diverse pool of international buyers eager to connect. Access our network of Sellers Meet our Buyers Clients Editor Loading\u2026","og_url":"https:\/\/ejuniper.com\/en\/clients\/","og_site_name":"Juniper Travel Technology","article_modified_time":"2026-07-20T14:58:28+00:00","og_image":[{"width":201,"height":200,"url":"https:\/\/ejuniper.com\/wp-content\/uploads\/2026\/06\/tecla_optz.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"70 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/ejuniper.com\/en\/clients\/","url":"https:\/\/ejuniper.com\/en\/clients\/","name":"clients Juniper Travel Technology","isPartOf":{"@id":"https:\/\/ejuniper.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ejuniper.com\/en\/clients\/#primaryimage"},"image":{"@id":"https:\/\/ejuniper.com\/en\/clients\/#primaryimage"},"thumbnailUrl":"https:\/\/ejuniper.com\/wp-content\/uploads\/2026\/06\/tecla_optz.webp","datePublished":"2026-04-20T08:16:03+00:00","dateModified":"2026-07-20T14:58:28+00:00","breadcrumb":{"@id":"https:\/\/ejuniper.com\/en\/clients\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ejuniper.com\/en\/clients\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ejuniper.com\/en\/clients\/#primaryimage","url":"https:\/\/ejuniper.com\/wp-content\/uploads\/2026\/06\/tecla_optz.webp","contentUrl":"https:\/\/ejuniper.com\/wp-content\/uploads\/2026\/06\/tecla_optz.webp","width":201,"height":200,"caption":"tecla_optz"},{"@type":"BreadcrumbList","@id":"https:\/\/ejuniper.com\/en\/clients\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ejuniper.com\/en\/"},{"@type":"ListItem","position":2,"name":"clients"}]},{"@type":"WebSite","@id":"https:\/\/ejuniper.com\/en\/#website","url":"https:\/\/ejuniper.com\/en\/","name":"https:\/\/ejuniper.com\/","description":"Redefining Travel with Innovative Technology","publisher":{"@id":"https:\/\/ejuniper.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ejuniper.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ejuniper.com\/en\/#organization","name":"Juniper Travel Technology","url":"https:\/\/ejuniper.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ejuniper.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/ejuniper.com\/wp-content\/uploads\/2024\/11\/juniper-2-1.svg","contentUrl":"https:\/\/ejuniper.com\/wp-content\/uploads\/2024\/11\/juniper-2-1.svg","width":48,"height":48,"caption":"Juniper Travel Technology"},"image":{"@id":"https:\/\/ejuniper.com\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/juniper\/"]}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/ejuniper.com\/en\/wp-json\/wp\/v2\/pages\/86872","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ejuniper.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ejuniper.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ejuniper.com\/en\/wp-json\/wp\/v2\/users\/55"}],"replies":[{"embeddable":true,"href":"https:\/\/ejuniper.com\/en\/wp-json\/wp\/v2\/comments?post=86872"}],"version-history":[{"count":117,"href":"https:\/\/ejuniper.com\/en\/wp-json\/wp\/v2\/pages\/86872\/revisions"}],"predecessor-version":[{"id":95838,"href":"https:\/\/ejuniper.com\/en\/wp-json\/wp\/v2\/pages\/86872\/revisions\/95838"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ejuniper.com\/en\/wp-json\/wp\/v2\/media\/92507"}],"wp:attachment":[{"href":"https:\/\/ejuniper.com\/en\/wp-json\/wp\/v2\/media?parent=86872"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}