;(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; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // 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(); })();
  • AssineUOL
Topo

"Me impor como homem trans ajuda", diz modelo recordista da SPFW

Modelo, Sam Porto é modelo recordista de desfiles da 48ª edição da São Paulo Fashion Week - Divulgação
Modelo, Sam Porto é modelo recordista de desfiles da 48ª edição da São Paulo Fashion Week Imagem: Divulgação

Natália Eiras

De Universa

16/10/2019 13h19Atualizada em 16/10/2019 17h12

O modelo Sam Porto, 25, faz questão de chegar aos lugares se apresentando como um homem transgênero. "Acho que é importante eu me posicionar para mostrar que pessoas como eu estão no mundo da moda e que merecem respeito", diz ele em entrevista para Universa.

O papo acontece dentro de um carro em movimento, na manhã de hoje. Foi o jeito para encontrar uma brecha em uma agenda cheia de provas de roupa, castings e eventos. É que Sam é o modelo recordista de desfiles da 48ª edição da São Paulo Fashion Week, que acontece até sexta-feira (18), no Pavilhão das Culturas Brasileiras, no Parque Ibirapuera.

Ele deve desfilar para nove marcas, incluindo Cavalera, nesta noite, e Ellus, que abriu a semana. "Acho que o fato de eu me impor como um homem transgênero está me ajudando, porque as pessoas me olham de um jeito diferente."

"Nunca tive uma transição de gênero"

Sam conta que nunca teve um momento em que soube que era transgênero. "Sempre fui assim, me vestia com roupas de menino. Meus pais até tentaram que eu usasse roupas femininas, mas à medida que fui crescendo eles começaram a respeitar a forma em que eu me sentia confortável para me vestir", afirma.

Há dois anos, começou a fazer trabalhos como modelo, mas apenas para marcas que ele conhecia pessoalmente. "Não queria entrar em uma agência porque tinha medo de ser confundido com uma pessoa andrógina e ser colocado com o casting de mulheres."

Porém, após começar a tomar hormônios e tirar os seios, há um ano e meio, ele deixou a cidade natal, Brasília, para focar na carreira de modelo. Ao ser convidado para fazer parte da agência Rock MGT, Sam fez uma exigência. "Queria ser apresentado pelo meu booker como homem transgênero. Se não fosse assim, eu não entraria."

Apesar do posicionamento bem resolvido, Sam entende que não é todo mundo que pode se sentir à vontade em carregar a plaquinha de "transgênero" o dia inteiro. "Falo que sou privilegiado porque meus pais me apoiam, tenho uma boa 'abilidade'. Por isso respeito quem não quer bater no peito em relação a isso."

Como dica, o modelo diz que uma pessoa transgênero precisa colocar a própria saúde mental em primeiro lugar. "A gente tem que se fortalecer para conseguir nos assumir e mudar a cabeça dos outros."

vendo lana vir pro brasil; eu sem 1real // @tinhosousa

Uma publicação compartilhada por S a m P o r t o (@portiinn) em