;(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

Violência nos levou ao ativismo, diz Erika Hilton, 1ª negra trans na Câmara de SP

Erika Hilton, do PSOL - Karime Xavier - 3.dez.19/Folhapress
Erika Hilton, do PSOL Imagem: Karime Xavier - 3.dez.19/Folhapress

Fernanda Boldrin

São Paulo

17/11/2020 11h18

Aos 27 anos, Erika Hilton (PSOL) se tornou a primeira mulher negra e trans eleita para a Câmara Municipal de São Paulo. Foi também a mulher mais votada, com mais de 50 mil votos. O resultado veio com a totalização das urnas no domingo (15), mas a militância, segundo Erika, vem de muito antes.

Além de indicarem um arrefecimento do discurso antipolítica que ajudou a eleger Jair Bolsonaro (sem partido), as eleições de 2020 foram marcadas pelo crescimento da chamada política identitária nas Câmaras Municipais. Ao menos 25 transexuais e travestis foram eleitos vereadores em todas as regiões do país.

"Eu tenho uma trajetória muito parecida com a das mulheres trans e travestis: expulsa de casa, vivenciando a prostituição muito jovem. Nesse lugar, a gente conhece a desumanização, a violência do Estado e das pessoas contra o corpo negro, contra o corpo trans", relata Erika. "A partir dessas violências todas, a gente percebe a necessidade de se organizar para construir um ativismo."

Erika concorreu a um cargo eletivo pela primeira vez em 2016, quando se lançou para a Câmara Municipal de Itu, no interior paulista, mas não levou a campanha adiante.

Já em 2018, concorreu em uma chapa coletiva do PSOL para a Alesp (Assembleia Legislativa de São Paulo), e acabou eleita como uma das codeputadas da Bancada Ativista (PSOL). Deixou o mandato este ano para concorrer a uma vaga na Câmara Municipal.

A política institucional, em sua visão, é uma maneira de levar adiante temas que lhe são caros —e que, sem a presença de alguém que os represente, seguiriam descartados. Na vereança, Erika pretende reforçar o projeto transcidadania, além de instituir o "Troféu Maria Carolina de Jesus", destinado a mulheres catadoras.

Filha mais velha entre três irmãs, ela conta que nasceu em Franco da Rocha, na região metropolitana de São Paulo, cresceu em Francisco Morato, também na Grande SP, e se mudou para Itu aos 14 anos.

Lá, sua mãe se aproximou de uma igreja que Erika descreve como "fundamentalista" —e cuja pregação culminou na sua expulsão da casa da família, aos 15 anos.

"Sempre fui trans, falava que era 'Maria do Bairro', ninguém nunca me reprimiu. Minha mãe sempre me deu liberdade, mas, quando ela se converte ao fundamentalismo, começa a achar que aquilo é errado, e aí me expulsa de casa. Na rua, começo a me prostituir, o por casas de cafetinas, até resgatar a relação com a minha mãe, que compreende que aquilo que ela estava fazendo era errado", disse Erika.

Já aos 19 anos e reconciliada com a família, terminou o colégio por meio do EJA (Ensino de Jovens e Adultos), e foi cursar pedagogia e gerontologia na Universidade Federal de São Carlos, no interior.

Foi ao fazer parte da equipe que fundou o cursinho pré-vestibular da faculdade, destinado a pessoas trans, que ela conta que percebeu o potencial da política institucional para levar sua pauta adiante.

"A partir daí, você já sabe", diz ela, que narra sua trajetória política que se iniciou com a disputa pela Câmara Municipal de Itu e chega agora à Câmara Municipal de São Paulo. "Me sinto vitoriosa, porque essa é uma construção vinda de muito tempo", finaliza.