;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
Topo
Notícias

Academia expulsa casal após personal cis dizer ter sido barrada em banheiro

do UOL

Do UOL, em São Paulo, e colaboração para o UOL, de Lisboa

28/05/2025 19h54Atualizada em 28/05/2025 20h23

A Selfit Academias anunciou hoje que encerrou o contrato de um casal de alunos depois de uma personal trainer cisgênero relatar ter sido alvo de agressões com viés transfóbico na unidade onde trabalha, em Recife. Um vídeo registrou parte do episódio.

O que aconteceu

Academia disse que o encerramento do contrato segue os princípios e valores da empresa. Eles também informaram ter apoiado a vítima, a personal e fisiculturista Kely Moraes.

Em comunicado, a empresa reiterou que repudia qualquer ato de preconceito e violência. Ainda afirmou que, assim que o episódio foi identificado, uma equipe atuou para conter os ânimos e garantir a segurança de Kely. "A missão da Selfit é proporcionar um ambiente seguro, acolhedor e respeitoso para todas as pessoas que frequentam as nossas unidades."

Os nomes dos alunos não foram divulgados, por isso, a reportagem não conseguiu encontrar as defesas deles para pedido de posicionamento. O espaço segue aberto para manifestação.

Entenda o caso

Kely disse que, na segunda-feira (26), foi confundida com uma mulher trans ao deixar o banheiro feminino. A mulher teria dito que a personal não poderia estar ali. O caso ocorreu na unidade da praia da Boa Viagem, na zona sul.

Ela [a mulher] disse que eu não podia ir ao banheiro, e eu perguntei o por quê. Ela disse 'não é lugar para você' e eu perguntei novamente o porquê. Ela disse que o banheiro de homem era lá embaixo. Disse 'você é trans, mas é um homem'. Eu me alterei um pouco, e minha aluna, que está grávida, chegou e ficou muito nervosa.
Kely Moraes

Um homem se juntou à mulher e disse que Kely não entraria no banheiro feminino, bloqueando a agem. Ele disse que, no andar de baixo, havia um banheiro que a personal poderia usar. Ela perguntou: "Por que eu sou o quê?". O agressor respondeu: "É inclusa, é inclusiva, tá lá embaixo".

Imagens feitas pela vítima mostram o bate-boca entre o homem e a aluna de Kely. "Ela [a mulher] falava com tanta certeza o que eu era [trans], que eu quase mostrei minha identidade para provar que eu era mulher. Depois, entendi que eu não tinha que provar nada para ninguém", disse a personal.

Se eu fosse [trans], o que tem a ver? Por que isso ofende tanto? Eu estava só trabalhando, só queria ir ao banheiro.
Kely Moraes

Kely contou que não é a primeira vez que é vítima de comentários e olhares preconceituosos devido ao seu porte físico. Segundo ela, porém, dessa vez foi mais grave. "Nunca tinha acontecido nada nessa proporção, nada tão violento. Me senti ofendida, humilhada; ela gritava para todo mundo e as pessoas mandavam eu ficar calada. Eu que era a vítima ali."

Personal registrou boletim de ocorrência. Ela contou que foi acolhida pelos funcionários da academia e pela aluna, que a acompanhou até a delegacia de Boa Viagem. Em nota, a Polícia Civil informou que foi registrada ocorrência de constrangimento ilegal, vias de fato e ameaça.

Notícias