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

Em dia crucial, CBF tenta montar pares de sedes para grupos da Copa América

Alejandro Domínguez, presidente da Conmebol, na posse de Rogério Caboclo, presidente da CBF - Lucas Figueiredo/CBF
Alejandro Domínguez, presidente da Conmebol, na posse de Rogério Caboclo, presidente da CBF Imagem: Lucas Figueiredo/CBF

Igor Siqueira

Do UOL, no Rio de Janeiro

01/06/2021 04h00

A organização da Copa América no Brasil tem um dia (1º) relevante para avançar na definição das sedes do torneio que começa em menos de duas semanas. O plano é achar quatro sedes para abrigar os dois grupos da primeira fase do torneio de seleções.

O desafio é montar um tabuleiro que envolva estados nos quais os jogos do torneio não foram vetados por decisão dos governos locais. Não há exigências de sedes por parte do Executivo federal, cujo discurso é evitar confirmação pública do que a Conmebol já anunciou. Ao mesmo tempo, a ideia da CBF é oferecer um menu que permita deslocamentos relativamente curtos. Por isso, a estratégia é fazer alguns "casamentos".

Brasília é uma certeza, como publicou o o coliunista do UOL Esporte, Marcel Rizzo. Logo, o o seguinte vai ser confirmar uma sede próxima para que as seleções de um grupo — provavelmente do Brasil estará entre elas — disputem toda a primeira fase nesse "núcleo". A CBF tem Cuiabá como opção, apesar de o time homônimo estar na Série A do Brasileirão. A Arena Pantanal foi usada na Copa do Mundo e tem estrutura suficiente para jogos do porte da Copa América.

Dentro da lógica geográfica, Goiânia e Cariacica, no Espírito Santo (que é Centro-Oeste, na geografia da CBF), não estão completamente fora do tabuleiro, apesar de terem chances reduzidas na comparação com Cuiabá. O que pesa contra ambas é o nível dos estádios disponíveis. Embora ajeitados, eles não têm a pompa/estrutura interna dos que foram usados na Copa do Mundo de 2014.

Se no Centro-Oeste o quadro parece ter resolução mais simples, outro par de cidades se mostra mais complexo. Voltando à lógica sobre a logística, se determinado governo veta jogo da Copa América, automaticamente ele prejudica um possível par da mesma região. Assim foi com o Recife. O governo pernambucano foi um dos primeiros a se manifestar contra o recebimento dos jogos. Isso decepcionou a CBF, que tinha, ainda sem falar com as autoridades locais, o estádio como barbada para a Copa América.

O Rio Grande do Norte se manifestou da mesma forma, tirando Natal da disputa. Como a Arena Fonte Nova, em Salvador, abriga um hospital de campanha com 200 internados, não resta opção no Nordeste. O Castelão ainda não está recuperado de um incêndio, como uma vistoria recente da Conmebol constatou. No Norte, Manaus não durou muito nos planos iniciais: a Conmebol não curtiu.

A balança a a pender para o Sudeste. Ao contrário de Minas Gerais, o estado de São Paulo já disse que aceita receber as partidas. Resta saber como conjugar isso com a tabela dos clubes no Brasileirão, que não será interrompido pela CBF, como escreveu outro colunista do UOL Esporte, Rodrigo Mattos. O Rio de Janeiro, que tem o Maracanã como alvo para a final, vai se resolver nesta terça, com uma discussão entre o governador Cláudio Castro e o prefeito Eduardo Paes. Em caso de resposta positiva, será necessário negociar termos com quem tem a permissão de uso do estádio: a sociedade entre Flamengo e Fluminense.

No Sul, Porto Alegre tem dois estádios de alto nível. O Beira-Rio foi usado na Copa-2014. A Arena do Grêmio, na Copa América 2019. Vice-presidente da CBF e gaúcho, Francisco Novelletto tem interesse em convencer as autoridades locais a receber jogos desta vez. Só que o governador Eduardo Leite já disse que isso seria "algo inoportuno".

O mapeamento da CBF também envolve locais de treinamento. Mas como diante de cada negativa governamental a estratégia é evitar o conflito público, o exercício de fazer os pares de sedes ficou mais difícil. Sem esquecer que o tempo é mais um inimigo.