Explore PILAT3S worldwide

Find Your Studio

Elevate Your Lifestyle with PILAT3S. Discover a studio near you where you can Align, Tone and Power - in style.

Filters

Country

function separarFiltros() {
  const optionTexts = document.querySelectorAll('.brxe-filter-radio .brx-option-text:not([data-processed])');

  optionTexts.forEach(span => {
    const text = span.textContent.trim();
    const match = text.match(/^(.+?)\s*\((\d+)\)$/);
    if (match) {
      const name = match[1];
      const count = match[2];

      span.textContent = name;
      span.dataset.processed = "true";

      const countSpan = document.createElement('span');
      countSpan.className = 'country-count';
      countSpan.textContent = count;

      span.parentElement.appendChild(countSpan);
    }
  });
}

// Roda ao carregar a página
document.addEventListener("DOMContentLoaded", separarFiltros);

// Roda novamente sempre que o Bricks atualizar algo via AJAX
document.addEventListener('bricks/ajax/load', separarFiltros);

// Fallback universal: observa o DOM por mudanças
const observer = new MutationObserver(separarFiltros);
observer.observe(document.body, { childList: true, subtree: true });
<div id="loadMoreContainer" style="text-align:center; margin-top: 40px;">
  <button id="loadMoreBtn" class="custom-load-more" style="display:none;">
    See more
    <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" style="margin-left:8px;">
      <path d="M12 19L12 5" stroke="#566251" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
      <path d="M7 14L12 19" stroke="#566251" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
      <path d="M17 14L12 19" stroke="#566251" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
    </svg>
  </button>
</div>

<style>
/* === Botão personalizado === */
.custom-load-more {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  border: 1px solid var(--Green-Main, #566251);
  color: var(--Green-Main, #566251);
  font-family: "TT Norms Pro";
  font-size: 14px;
  font-style: normal;
  font-weight: 500;
  line-height: normal;
  background: transparent;
  border-radius: 50px;
  padding: 10px 24px;
  cursor: pointer;
  transition: all 0.3s ease;
}

.custom-load-more:hover {
  background: var(--Green-Main, #566251);
  color: #fff;
}

.custom-load-more:hover svg path {
  stroke: #fff;
}

.custom-load-more:hover svg {
  transform: translateY(2px);
  transition: transform 0.3s ease;
}

/* Fade suave */
.product-card {
  opacity: 0;
  transform: translateY(15px);
  transition: opacity 0.4s ease, transform 0.4s ease;
}

.product-card[style*="block"] {
  opacity: 1;
  transform: translateY(0);
}
</style>

<script>
document.addEventListener("DOMContentLoaded", function() {
  const ITEMS_PER_PAGE = 3;
  const loadMoreBtn = document.getElementById("loadMoreBtn");
  const containerSelector = ".alm-listing, #brxe-qlkeef";

  function initLoadMore() {
    const container = document.querySelector(containerSelector);
    if (!container) return;

    const items = container.querySelectorAll(".product-card");
    if (!items.length) {
      loadMoreBtn.style.display = "none";
      return;
    }

    // Detecta filtro ativo
    const activeFilter = document.querySelector('.brx-option-active input');
    const filterValue = activeFilter ? activeFilter.value : "";

    // Ajuste aqui se o value do AU for outro
    const behavesAsDefault = (filterValue === "" || filterValue === "all");

    // Sempre mostra todos inicialmente
    items.forEach(item => item.style.display = "block");
    loadMoreBtn.style.display = "none";

    // ✅ FILTRO APLICADO (exceto ALL)
    if (!behavesAsDefault) {
      return; // Mostra todos → sem botão
    }

    // ✅ SEM FILTRO ou AU → comportamento LOAD MORE
    let visibleCount = ITEMS_PER_PAGE;

    items.forEach((item, i) => {
      item.style.display = i < ITEMS_PER_PAGE ? "block" : "none";
    });

    toggleButton();

    loadMoreBtn.onclick = function() {
      const nextVisible = visibleCount + ITEMS_PER_PAGE;
      for (let i = visibleCount; i < nextVisible && i < items.length; i++) {
        items[i].style.display = "block";
      }
      visibleCount += ITEMS_PER_PAGE;
      toggleButton();
    };

    function toggleButton() {
      const visibleItems = Array.from(items).filter(el => el.style.display !== "none");
      loadMoreBtn.style.display =
        items.length > visibleItems.length ? "inline-flex" : "none";
    }
  }

  initLoadMore();

  // Reaplica após AJAX
  document.addEventListener("bricks/ajax/load", function() {
    setTimeout(initLoadMore, 100);
  });

  // Observer (caso Bricks re-renderize)
  const observer = new MutationObserver(() => {
    if (document.querySelectorAll(".product-card").length) {
      setTimeout(initLoadMore, 100);
    }
  });

  observer.observe(document.body, { childList: true, subtree: true });
});
</script>

<script>
document.addEventListener("DOMContentLoaded", function() {
  const filterList = document.querySelector('.brxe-filter-radio');
  if (!filterList) return;

  const select = document.createElement('select');
  select.className = 'country-filter-dropdown';

  const options = filterList.querySelectorAll('li label');
  options.forEach((label) => {
    const text = label.querySelector('.brx-option-text')?.textContent.trim();
    const count = label.querySelector('.country-count')?.textContent.trim() || '';
    const value = label.querySelector('input')?.value || '';

    const option = document.createElement('option');
    option.value = value;
    option.textContent = count ? `${text} (${count})` : text;

    if (label.classList.contains('brx-option-active')) {
      option.selected = true;
    }
    select.appendChild(option);
  });

  filterList.parentNode.insertBefore(select, filterList);

  select.addEventListener('change', function() {
    const radios = filterList.querySelectorAll('input[type="radio"]');
    radios.forEach(radio => {
      if (radio.value === select.value) {
        radio.click();
      }
    });
  });

  document.addEventListener("bricks/ajax/load", () => {
    const activeLabel = filterList.querySelector('.brx-option-active input');
    if (activeLabel) select.value = activeLabel.value;
  });
});
</script>

<script>
document.addEventListener("DOMContentLoaded", function () {

  // Função para resetar o dropdown sempre que limpar
  function resetDropdownToAll() {
    const select = document.querySelector(".country-filter-dropdown");
    if (select) {
      select.selectedIndex = 0;
    }
  }

  // Observa mudanças no DOM após reset
  const observer = new MutationObserver(() => {
    // Quando o filtro for resetado, o texto ativo volta para ALL,
    // então sincronizamos o dropdown
    const activeInput = document.querySelector(".brx-option-active input");
    if (activeInput && activeInput.value === "all") {
      resetDropdownToAll();
    }
  });

  observer.observe(document.body, {
    childList: true,
    subtree: true
  });

  // Captura clique no botão CLEAR (type=reset)
  document.addEventListener("click", function (e) {
    if (e.target.closest(".brxe-filter-submit[type='reset']")) {
      // Pequeno delay para o browser resetar os radios
      setTimeout(() => {
        resetDropdownToAll();
      }, 50);
    }
  });

});
</script>




<style>
.country-filter-dropdown {
  display: none;
}

@media (max-width: 768px) {
  .brxe-filter-radio {
    display: none !important;
  }

  .country-filter-dropdown {
    display: block;
    width: 100%;
    background-color: var(--bricks-color-fappzc);
    border: 1px solid var(--bricks-color-dyuxyf);
    border-radius: 24px;
    padding: 4px 16px;
    color: var(--bricks-color-ubyowm);
    margin-top: 20px;
    font-family: "TT Norms Pro", sans-serif;
    font-size: 16px;
    font-weight: 400;
    appearance: none;
    cursor: pointer;

    /* Ícone seta preenchida e menor */
    background-image: url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='%23566251' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1L5 5L9 1H1Z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 16px center;
    background-size: 10px;
  }
}
</style>
Contact Us

Get In Touch

Have a question or need support? Fill out the form below and our team will be in touch shortly.

Got a question regarding your studio?

Connect with us:
<form id="brxe-bjdyin" action="<?php echo esc_url($_SERVER['REQUEST_URI']); ?>" method="post">
  <div class="form-group" role="group">
    <input
      id="form-field-feefcf"
      name="form-field-30d577"
      aria-label="First name"
      spellcheck="false"
      type="text"
      placeholder="Enter your first name"
      required
    >
  </div>

  <div class="form-group" role="group">
    <input
      id="form-field-97c8ca"
      name="form-field-bxhina"
      aria-label="Last name"
      spellcheck="false"
      type="text"
      placeholder="Enter your last name"
    >
  </div>

  <div class="form-group" role="group">
    <input
      id="form-field-7d3755"
      name="form-field-40ae92"
      aria-label="Email"
      type="email"
      maxlength="320"
      placeholder="Enter your email"
      required
    >
  </div>

  <div class="form-group" role="group">
    <input
      id="form-field-4a09f6"
      name="form-field-madcme"
      aria-label="Phone"
      type="tel"
      placeholder="Enter your phone number"
    >
  </div>

  <?php echo do_shortcode('[filter_country_studio]'); ?>

  <div class="form-group" role="group">
    <textarea
      id="form-field-c2b017"
      name="form-field-2f0f5e"
      aria-label="Message"
      spellcheck="false"
      placeholder="Your message…"
      required
    ></textarea>
  </div>

  <!-- Honeypot escondido -->
  <div style="display:none !important;">
    <input type="text" name="anti_robot_field" tabindex="-1" autocomplete="off">
  </div>

  <!-- reCAPTCHA v2 -->
  <div class="g-recaptcha" data-sitekey="6Lc48RksAAAAAH3KnpT2sH_OCu-tkc4KTyNWpaRE"></div>
  <script src="https://www.google.com/recaptcha/api.js" async defer></script>

  <div class="form-group" role="radiogroup" aria-labelledby="label-yicrye">
    <ul class="options-wrapper">
      <li>
        <input
          type="radio"
          id="form-field-yicrye-0"
          name="form-field-yicrye[]"
          required
          value="I authorize to be contacted regarding my inquiry."
        >
        <label for="form-field-yicrye-0">
          I authorize to be contacted regarding my inquiry.
        </label>
      </li>
    </ul>
  </div>

  <div class="form-group submit-button-wrapper">
    <button type="submit" class="bricks-button bricks-background-primary icon-right">
      <span class="text">Send message</span>

      <svg class="icon-send" xmlns="http://www.w3.org/2000/svg" width="24" height="25" viewBox="0 0 24 25" fill="none">
        <path d="M19 12.2798H5" stroke="#FAFAFA" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
        <path d="M14 17.2798L19 12.2798" stroke="#FAFAFA" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
        <path d="M14 7.27979L19 12.2798" stroke="#FAFAFA" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
      </svg>

      <span class="loading">
        <svg version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
          <g stroke-linecap="round" stroke-width="1" stroke="currentColor" fill="none" stroke-linejoin="round">
            <path d="M0.927,10.199l2.787,4.151l3.205,-3.838"></path>
            <path d="M23.5,14.5l-2.786,-4.15l-3.206,3.838"></path>
            <path d="M20.677,10.387c0.834,4.408 -2.273,8.729 -6.509,9.729c-2.954,0.699 -5.916,-0.238 -7.931,-2.224"></path>
            <path d="M3.719,14.325c-1.314,-4.883 1.969,-9.675 6.538,-10.753c3.156,-0.747 6.316,0.372 8.324,2.641"></path>
          </g>
          <path fill="none" d="M0,0h24v24h-24Z"></path>
        </svg>
      </span>
    </button>

    <input type="hidden" name="custom_studio_form" value="1">
  </div>
</form>

<!-- Mensagem de sucesso -->
<?php if (isset($_GET['success'])) : ?>
  <div class="alert alert-success">
    <?php
      $lang = function_exists('pll_current_language') ? pll_current_language() : 'en';

      switch ($lang) {
        case 'pt':
          echo 'Sua mensagem foi enviada com sucesso!';
          break;
        case 'es':
          echo '¡Tu mensaje ha sido enviado con éxito!';
          break;
        case 'en':
        default:
          echo 'Your message has been sent successfully!';
          break;
      }
    ?>
  </div>
<?php endif; ?>
#brxe-bjdyin {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
}

.form-group {
    display: flex;
    flex-direction: column;
    padding: 0 0 20px;
    width: 100%;
}

.form-group {
    padding-bottom: 12px;
}

.form-group:nth-child(1) {
    width: 48.6%;
}

.form-group:nth-child(2) {
    width: 48.6%;
}

.form-group input {
    font-size: 16px;
    font-weight: 400;
    color: var(--bricks-color-gymnyz);
    line-height: 1.5;
    background-color: var(--bricks-color-fappzc);
    border-radius: 24px;
    padding-top: 12px;
    padding-right: 18px;
    padding-bottom: 12px;
    padding-left: 18px;
}

.form-group select {
    font-size: 16px;
    font-weight: 400;
    color: var(--bricks-color-ubyowm);
    line-height: 1.5;
    background-color: var(--bricks-color-fappzc);
    border-radius: 24px;
    padding-top: 12px;
    padding-right: 18px;
    padding-bottom: 12px;
    padding-left: 18px;
}

.form-group textarea {
    font-size: 16px;
    font-weight: 400;
    color: var(--bricks-color-gymnyz);
    line-height: 1.5;
    background-color: var(--bricks-color-fappzc);
    border-radius: 24px;
    padding-top: 12px;
    padding-right: 18px;
    padding-bottom: 12px;
    padding-left: 18px;
  	resize: none;
}

.form-group label {
    font-size: 14px;
    text-transform: none;
    letter-spacing: 0px;
    font-weight: 400;
}

.options-wrapper {
    list-style-type: none;
    margin: 0;
    padding: 0;
}

.options-wrapper li {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    flex-wrap: nowrap;
    gap: 5px;
}

.options-wrapper input,.options-wrapper label {
    display: inline-block;
    height: auto;
    margin: 0 5px 0 0;
    width: auto;
}

.submit-button-wrapper {
    margin-top: 0;
    margin-right: 0;
    margin-bottom: 0;
    margin-left: 0;
}

.submit-button-wrapper {
    width: 100%;
  	max-width: 163px;
}

.g-recaptcha {
    margin-bottom: 15px !important;
}

.bricks-button {
    font-size: 14px;
    line-height: 1.1;
    color: var(--bricks-color-fappzc);
    border-radius: 100px;
    transition: .2s;
    padding-top: 8px;
    padding-right: 16px;
    padding-bottom: 8px;
    padding-left: 16px;
}

button[type=submit] .loading {
    display: none;
}


@media(max-width: 991px) {
  .submit-button-wrapper {
        max-width: 100%;
    		height: 100%;
    }
  
  .bricks-button {
        width: 100% !important;
        min-width: 100% !important;
    		height: 41px;
    }
}

@media(max-width: 478px) {
  .form-group:nth-child(1) {
    width: 100%;
}

.form-group:nth-child(2) {
    width: 100%;
}
}
document.addEventListener('DOMContentLoaded', function () {
  const form = document.getElementById('brxe-bjdyin');
  const button = document.getElementById('submitBtn');
  const icon = button.querySelector('.icon-send');
  const loading = button.querySelector('.loading');
  const text = button.querySelector('.text');

  form.addEventListener('submit', function () {
    icon.style.display = 'none';
    loading.style.display = 'inline-block';
    text.textContent = getLocalizedSendingText();
  });

  function getLocalizedSendingText() {
    const lang = document.documentElement.lang || 'en';
    switch (lang) {
      case 'pt': return 'Enviando...';
      case 'es': return 'Enviando...';
      default: return 'Sending...';
    }
  }
});

document.addEventListener("DOMContentLoaded", function () {
    const form = document.getElementById("brxe-bjdyin");

    form.addEventListener("submit", function (e) {

        // HONEYPOT → Se preenchido, bloquear
        const honeypot = form.querySelector("input[name='anti_robot_field']");
        if (honeypot && honeypot.value.trim() !== "") {
            e.preventDefault();
            alert("Erro de validação.");
            return false;
        }

        // reCAPTCHA vazio → bloquear
        const recaptcha = grecaptcha.getResponse();
        if (recaptcha.length === 0) {
            e.preventDefault();
            alert("Por favor, confirme que você não é um robô.");
            return false;
        }

        // 🔥 Delay de 1.5s para recarregar após envio bem-sucedido
        setTimeout(() => {
            if (typeof grecaptcha !== "undefined") {
                grecaptcha.reset();
            }
        }, 1500);
    });
});
Coming soon

Stay tuned for what's next

We're working behind the scenes to bring you new and exciting features to enhance your PILAT3S experience. This page is currently under development and will be launched soon. Check back later for updates, and get ready to elevate your fitness journey.