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

Paulista - 2023

Guarani aproveita apagão do Santos e vence com direito a gol de medalhão

Do UOL, em São Paulo

18/01/2023 23h32

O Santos sofreu um apagão defensivo contra o Guarani, perdeu por 2 a 0 em jogo do Campeonato Paulista e acendeu um sinal de alerta para o técnico Odair Hellmann, que mudou o esquema vitorioso da estreia e viu sua equipe ser controlada pelo adversário.

  • A partida aconteceu no Brinco de Ouro, em Campinas, e foi válida pela 2ª rodada do estadual;
  • O experiente Giovanni Augusto marcou no início do duelo e Nicolas Careca ampliou aos 20 segundos do 2° tempo;
  • Odair Hellmann iniciou a partida sem os quatro atacantes do jogo de estreia, mas reativou esquema no intervalo;
  • O Guarani apostou em jogadas pelos lados do campo -- principalmente pela direita, nas costas de Lucas Pires.

Os gols e os destaques

1x0 sai rapidinho. Em erro bizarro na saída de bola Santos aos quatro minutos, Bauermann se enrolou e foi desarmado por Bruno José, que cruzou da direita para Derek. O atacante, ao ver João Paulo saindo do gol, driblou o goleiro e foi derrubado. Raphael Claus marcou pênalti, e Giovanni Augusto converteu.

Guarani aterroriza pelo alto. Aos 11 minutos, Derek recebeu cruzamento pelo alto e acertou a trave — no rebote, João Paulo operou um milagre e evitou o novo gol. O santista voltou a aparecer pouco depois em novas cabeçadas: uma de Luciano Castán e uma de Giovanni Augusto.

2x0. Bastou 20 segundos do 2° tempo para Nicolas Careca, que substituiu o lesionado Derek, ampliar. Em nova jogada pelo lado direito, Bruno José cruzou e encontrou o atacante dentro da área. Nas costas de Maicon, ele não deu chances de defesa para João Paulo.

Reação (quase) inexistente. Soteldo apareceu mais na 2ª etapa, mas não conseguiu causar perigo ao gol do Guarani. Ângelo e Lucas Barbosa, que entraram nos lugares de Zanocelo e Marcos Leonardo, também não tiveram sucesso em lances individuais.

Jenison surpreende. Já na parte final do duelo, o camisa 9 do Guarani viu João Paulo adiantado e, ainda do campo de defesa dos mandantes, chutou de cobertura. A bola ou por cima do gol.

A tabela e os próximos jogos

O Guarani, que assumiu provisoriamente a liderança do Grupo B com três pontos, tem pela frente o Ituano no sábado (21). Um dia depois, o Santos encara o São Bernardo fora de casa — a equipe de Hellmann acumula os mesmos três pontos, mas ocupa apenas o 3° lugar do Grupo A.

FICHA TÉCNICA

GUARANI 2x0 SANTOS - 2ª rodada do Campeonato Paulista

Data e horário: 18 de janeiro de 2023, às 21h35 (de Brasília)
Local: Brinco de Ouro, em Campinas (SP)
Árbitro: Raphael Claus
Assistentes: Daniel Paulo Ziolli e Rafael Tadeu Alves de Souza
VAR: Adriano de Assis Miranda
Cartões amarelos: João Paulo (SAN)
Cartões vermelhos: não houve
Gols: Giovanni Augusto (GUA), aos 5 min do 1° tempo, e Nicolas Careca (GUA), aos 20 seg do 2° tempo

GUARANI: Kozlinski; Diogo Mateus, Lucão, Luciano Castán e Jamerson; Leandro Vilela (Yago), Richard Ríos e Giovanni Augusto (Alan Santos); Bruno José (Bruno Michel), Bruninho (Jenison) e Derek (Nicolas Careca). Técnico: Mozart

SANTOS: João Paulo; João Lucas (Nathan), Maicon, Eduardo Bauermann e Lucas Pires; Dodi (Lucas Braga), Sandry e Zanocelo (Ângelo); Mendoza (Rwan Seco), Marcos Leonardo (Lucas Barbosa) e Soteldo. Técnico: Odair Hellmann