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

Podcast

UOL Prime

Podcasts com o melhor do jornalismo do UOL


'Quem tem mais dinheiro leva o jogo': senador cassado movimenta milhões no futebol | Podcast UOL Prime #73

Do UOL, em São Paulo

05/06/2025 05h20

O primeiro senador a ser cassado no Brasil é o principal nome do mercado de compra e venda de mandos de campo no futebol brasileiro hoje.

Luiz Estevão viveu uma guinada depois dos anos preso por corrupção ativa, estelionato e peculato.

Com dinheiro em caixa e propostas que atraem os dirigentes, conseguiu se colocar como principal organizador de jogos de futebol, quando os clubes precisam ou são atraídos para tirar as partidas dos seus estádios de origem.

É sobre essa história que José Roberto de Toledo conversa com o repórter Igor Siqueira no novo episódio do podcast UOL Prime.

"Luiz Estevão é um grande empresário em Brasília. Começou no ramo imobiliário, com grandes quantidades de construções. Foi um cara muito influente no governo Collor", lembra Toledo, mencionando a origem política do senador preso por envolvimento no superfaturamento das obras do TRT-SP (Tribunal Regional do Trabalho de São Paulo).

O nível de arrojo nos negócios gerou, por exemplo, uma proposta de R$ 1,2 milhão ao Volta Redonda e mais R$ 2 milhões ao Flamengo para levar a Brasília um jogo pelo Campeonato Carioca.

O principal concorrente era o ex-atacante Roni, que jogou no Fluminense, Santos e Flamengo e que havia oferecido R$ 300 mil ao time do interior do Rio.

"O mercado do futebol o trata como uma pessoa esclarecida e também arrojada nas propostas financeiras. As cifras estão mais altas por causa da atuação dele", explica o repórter Igor Siqueira.

"Hoje, é impensável explicar o fluxo de venda de mandos de campo em Brasília, Cariacica e até Manaus sem citar Luiz Estevão."

Se a carreira política no Congresso ruiu com a cassação em 2000, Luiz Estevão tem boa entrada com clubes, contrato com a CBF —ainda na antiga gestão do presidente Ednaldo Rodrigues.

E há um trânsito facilitado no estádio Mané Garrincha, em Brasília, cidade em que mora e onde construiu a vida, apesar de ser carioca.

A entrada dele no mercado aconteceu em 2022, graças a um erro de informação da diretoria do Cruzeiro.

A ideia era fazer um jogo em Brasília, contra a Chapecoense, pela Série B. E os dirigentes do clube mineiro imaginaram que Luiz Estevão fizesse parte da istração do estádio.

Não fazia. Mesmo assim, ele organizou o jogo. Alugou o estádio, pagou todas as despesas necessárias para levar a partida à capital federal. A partir dali, viu que o negócio poderia ser rentável.

Além de promover eventos, Luiz Estevão é empresário do ramo da comunicação. E a estratégia no futebol também é para pulverizar a marca do seu site, o Metrópoles.

Ele conversou com o UOL em pelo menos duas oportunidades e detalhou os negócios.

Luiz Estevão se vê com projeção de futuro no futebol brasileiro, mas assegura que, em termos de política, não tem planos de se candidatar para qualquer cargo novamente.

O podcast UOL Prime é publicado às quintas-feiras no YouTube do UOL Prime, Spotify, Apple Podcasts, Amazon Music, Deezer e em todas as plataformas de podcast.