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

Cria da TV, Russomanno desidrata pela 3ª vez após campanha na TV

30. set. 2020 - Celso Russomanno (Republicanos) cumpre agenda de campanha em Pinheiros, na zona oeste de São Paulo - Suamy Beydoun/AGIF - Agência de Fotografia/Estadão Conteúdo
30. set. 2020 - Celso Russomanno (Republicanos) cumpre agenda de campanha em Pinheiros, na zona oeste de São Paulo Imagem: Suamy Beydoun/AGIF - Agência de Fotografia/Estadão Conteúdo

Matheus Pichonelli

Colunista do UOL

15/11/2020 23h55

Jornalista e apresentador de TV, com agens por "Aqui e Agora", "Cidade Alerta" e atualmente da "Patrulha do Consumidor", Celso Russomanno (Republicanos) começou à frente nas pesquisas pela terceira eleição seguida em São Paulo. E, pela terceira vez seguida, não chegou sequer ao segundo turno. Se não trabalhasse na concorrência, poderia pedir música no "Fantástico".

Russomanno virou um case desta década a ser analisado pela ciência política. Como nas eleições anteriores, a derrocada do candidato, que é cria da TV, começa justamente após o início da campanha na TV.

Em edições anteriores, faltaram base social, tempo na propaganda, estrutura partidária e alianças fortes para quem tinha "apenas" um rosto conhecido dos espectadores. Ele tentou compensar as limitações neste ano com o apoio do presidente Jair Bolsonaro (sem partido). Só que o apoio veio no momento em que a rejeição do capitão na cidade chegou a 50% —exatamente o mesmo índice do candidato, segundo o último Datafolha.

Declarações desastrosas e contradições sobre de que lado está em uma época de polarização quase matemática ajudam a explicar a terceira queda de Russomanno. Mas não só.

A pancada desta vez começou já no debate promovido pela Band, no começo de outubro, quando Joice Hasselmann (PSL) mostrou as traves da chuteira ao associar seu colega na Câmara dos Deputados à esquerda e ao escândalo da Lava Jato. O confronto no debate rendeu pílulas fartamente distribuídas pelas redes sociais.

"Você votaria em quem agora se diz de direita mas apoiou publicamente Dilma Rousseff?", questionou Joice, que se autointitulava direita-raiz em seu programa na TV.

Em suas redes, Joice postou vídeos com títulos sugestivos, como "Tá russo, mano", notícias sobre bloqueio de bens do rival e momentos constrangedores, como o dia em que o rival foi hostilizado nas ruas por um eleitor. "Tem candidato querendo esconder o ado", diz um dos vídeos.

Até mesmo Márcio França (PSB), que optou por uma fala mais propositiva na TV, chegou a tirar uma casca de Russomanno com um vídeo mostrando o rival dançando com o governador João Doria (PSDB).

Russomanno foi também alvo fácil de Guilherme Boulos (PSOL). Logo nos primeiros dias de campanha, o rival postou no Twitter um vídeo curto cujo narrador dizia que "Celso fala fino com poderosos e grita com as manas" —em referência à briga com uma atendente de supermercado—, "está na TV mas não quer debate", "puxa-saco de miliciano e está há 'miliano' no Congresso e nunca fez nada por você". "Tá ligado nesse mano?", questionava o narrador ao estilo Mano Brown.

Russomanno, que levou para a propaganda da TV uma estética de apresentador em estúdio da Record, respondeu chamando Boulos de "farsante de esquerda". No debate UOL/Folha, lançou uma pegadinha ao rival, acusado por ele de usar empresa laranja em sua campanha. Foi prontamente desmentido pelo estafe do candidato do PSOL, que conseguiu também derrubar um vídeo da propaganda eleitoral que o classificava como um "Boulos de problemas".

Não foi o único trocadilho malsucedido

Nas redes, ele até tentou mostrar espírito esportivo se vestindo como minicraque da camisa 10 que bate bola com Bolsonaro num vídeo usurpado da Copa de 70 e questionado pela Fifa.

Sob ataque em várias frentes, Russomanno tentou se mostrar cada vez mais alinhado ao bolsonarismo, sobretudo em entrevistas. As polêmicas não surgiam em vão, mas faltava a ele aquela ogrice-raiz, o desing-reaça-moleque, aquele pão com leite condensado pingando na mesa de trabalho e espalhado na bandeira do Brasil ao fundo. (Talvez Russomanno tenha mais a aprender com um esquete recente do Porta dos Fundos do que com seu marqueteiro Elsinho Mouco, estrategista também do caloroso Michel Temer).

Como só Bolsonaro consegue ser Bolsonaro, seu aliado em São Paulo provocou um curto-circuito ao defender bobagens como a não-obrigatoriedade da vacina e teorias sobre uma suposta imunidade à covid-19 ligada à falta de banho.

O prejuízo foi tamanho que ele precisou levar um morador de rua para seu programa para abordar a situação dos albergues na capital. Russomanno, na TV, tentou até mostrar indignação pelos mais vulneráveis da cidade que queria governar. Era tarde demais.

Russomanno foi perdendo fôlego até chegar à reta final desidratado, como das últimas vezes —dessa vez, levando junto a moral do capitão, com quem aos 45 do segundo tempo compartilhou um post vestido de Coringa, o perturbado personagem da DC Comics. Ele se lançou como Celsoringa, uma espécie de fiel escudeiro do "Bolsoringa", e precisou apagar a postagem logo depois.

Um resumo melancólico de uma campanha que, dessa vez, ele prometia decolar.