Explora PILAT3S por Todo el Mundo
Encuentra tu Estudio
Eleva tu estilo de vida con PILAT3S. Descubre tu estudio más cercano.
Filtros
País
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 });
Coming Soon
<div id="loadMoreContainer" style="text-align:center; margin-top: 40px;">
<button id="loadMoreBtn" class="custom-load-more" style="display:none;">
Descubra más
<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-soaaks";
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>
Contáctanos
Contáctanos
¿Tienes alguna pregunta o necesitas ayuda? Rellena el formulario y nuestro equipo se pondrá en contacto contigo lo antes posible.
<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="Nombre"
spellcheck="false"
type="text"
value=""
placeholder="Introduce tu nombre"
required
>
</div>
<div class="form-group" role="group">
<input
id="form-field-97c8ca"
name="form-field-bxhina"
aria-label="Apellido"
spellcheck="false"
type="text"
value=""
placeholder="Introduce tu apellido"
>
</div>
<div class="form-group" role="group">
<input
id="form-field-7d3755"
name="form-field-40ae92"
aria-label="Correo electrónico"
type="email"
value=""
placeholder="Introduce tu correo electrónico"
maxlength="320"
required
>
</div>
<div class="form-group" role="group">
<input
id="form-field-4a09f6"
name="form-field-madcme"
aria-label="Teléfono"
type="tel"
value=""
placeholder="Introduce tu número de teléfono"
>
</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="Tu mensage…"
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="Autorizo a que me contacten con respecto a mi consulta."
>
<label for="form-field-yicrye-0">
Autorizo a que me contacten con respecto a mi consulta.
</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">Enviar mensaje</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 opcional -->
<?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: 200px;
}
.g-recaptcha {
margin-bottom: 15px !important;
}
.bricks-button {
width: 100%;
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...';
case 'fr': return 'Envoi en cours...';
default: return 'Sending...';
}
}
});
document.addEventListener("DOMContentLoaded", function () {
const form = document.getElementById("brxe-bjdyin");
form.addEventListener("submit", function (e) {
// HONEYPOT → Si rempli, bloquer
const honeypot = form.querySelector("input[name='anti_robot_field']");
if (honeypot && honeypot.value.trim() !== "") {
e.preventDefault();
alert("Erreur de validation.");
return false;
}
// reCAPTCHA vide → bloquer
const recaptcha = grecaptcha.getResponse();
if (recaptcha.length === 0) {
e.preventDefault();
alert("Veuillez confirmer que vous n’êtes pas un robot.");
return false;
}
// 🔥 Délai de 1,5 s pour réinitialiser après envoi réussi
setTimeout(() => {
if (typeof grecaptcha !== "undefined") {
grecaptcha.reset();
}
}, 1500);
});
});