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

OPINIÃO

'Euphoria' retorna para 2ª temporada apostando forte em nudez e melancolia

Zendaya na segunda temporada de "Euphoria" - Divulgação/HBO
Zendaya na segunda temporada de "Euphoria" Imagem: Divulgação/HBO

Laysa Zanetti

De Splash, em São Paulo

10/01/2022 17h28

Mais de dois anos separam o final da primeira temporada de "Euphoria" do início da segunda, que aconteceu na noite de ontem na HBO e na HBO Max. A série estrelada e protagonizada por Zendaya voltou em ritmo de festa, sem perder o fôlego, a energia e o potencial de devastação que tanto marcaram a primeira temporada.

A própria estrela do show, aliás, alertou: o novo ano é ainda mais intenso que se espera. "Essa temporada, talvez mais do que a anterior, é profundamente emotiva e lida com assuntos que podem desencadear gatilhos e ser difíceis de se assistir", escreveu em uma publicação em seu Instagram.

E, a julgar pelo primeiro episódio, a jovem vencedora do Emmy não estava exagerando.

Para quem não se lembra...

No final da primeira temporada, vimos Jules (Hunter Schafer) embarcar no trem para a cidade, deixando Rue (Zendaya) desolada na estação — o que culminou em um número musical onírico que simbolizava a recaída da protagonista no mundo das drogas.

Durante o intervalo entre as duas temporadas, quando o retorno da série foi atrasado por causa da pandemia da covid-19, o criador Sam Levinson lançou dois episódios especiais -um focado em Rue e o outro, em Jules. O primeiro, "Trouble Don't Last Always", se a durante a véspera de natal, e traz a personagem em uma conversa intensa com seu padrinho do Narcóticos Anônimos, personagem de Colman Domingo. Os dois falam sobre vício, mentiras e, é claro, sobre Jules.

Aqueles episódios, despidos de toda a pompa e das luzes estouradas que compõem a fotografia da série, deram lugar a duas personagens mais complexas e multifacetadas. Retirada a maquiagem fluorescente e o estilo que costuma ficar acima da substância, resta uma "Euphoria" muito menos eufórica, mas igualmente intensa.

Hunter Schafer é Jules em "Euphoria" - Divulgação/HBO - Divulgação/HBO
Hunter Schafer é Jules em "Euphoria"
Imagem: Divulgação/HBO

Por isso, aquela hora que serviu para mostrar a vulnerabilidade dilacerante de Rue conta muito para o que vimos no novo capítulo, intitulado "Trying to Get to Heaven Before They Close the Door".

Cumprindo promessas

A segunda temporada começa contando a história prévia de Fezco (Angus Clud), mas não sem antes ar pelo velho e, a essa altura, já tradicional choque pelo excesso de nudez masculina. O que era o centro da discussão antes de a primeira temporada estrear agora é visto como um mero recurso narrativo —como deve ser.

A nudez masculina em "Euphoria" tem um ar ao mesmo tempo provocativo e banal. Provocativo porque vai na contramão do excesso de nudez feminina mais comum em produções de TV (e da HBO). E banal porque trata tais cenas como corriqueiras.

Neste sentido, existe um cuidado estético visível com luz e enquadramento que dá à nudez um status de obra de arte decadente: apesar da beleza das cenas, o contexto é sempre triste, quase ridículo.

Angus Cloud é Fezco em "Euphoria" - Divulgação/HBO - Divulgação/HBO
Angus Cloud é Fezco em "Euphoria"
Imagem: Divulgação/HBO

Nas entrelinhas, o aparente recado é simples. Sam Levinson, que tanto empresta sua própria juventude a Rue, segue interessado em expor o quanto a masculinidade excessiva, para ele, é a compensação para alguma outra coisa.

No episódio, isso fica claro através da história de Fezco, que volta para cumprir a promessa feita a Nate (Jacob Elordi). Durante todo o episódio, ele tenta colocar na balança o que é bom e o que é ruim, sem encontrar uma resposta definitiva para o que vai levá-lo ao céu ou ao inferno. Ele busca respostas na avó, e depois em Lexi (Maude Apatow), mas nada do que elas digam soa decisório.

Fezco a toda a festa de ano novo tentando decidir se o que está prestes a fazer é certo ou errado. Ele ainda não tem uma resposta quando decide seguir com o plano mesmo assim.

Nada de respostas fáceis

Essa falta de respostas concretas funciona como a maior arma a favor de "Euphoria". Considerando o fervor da adolescência de seus protagonistas, tal característica nunca deve estar fora de vista. Mas ela está impressa com ainda mais força na estreia da segunda temporada: ao reapresentar o público a todos os personagens, o episódio faz questão de destacar que eles estão em buscas frustradas.

Afinal de contas, todos ali estão atrás de alguém ou de alguma coisa durante a festa. Quando eles encontram o que queriam, o resultado não é tão explosivo ou catártico como toda a construção havia prometido. Isso vai do confronto que não existe entre Maddy (Alexa Damie) e Cassie (Sydney Sweeney) à reconciliação anticlimática de Rue e Jules.

De forma alguma isso faz da estreia da segunda temporada de "Euphoria" algo ruim. Pelo contrário, a força da série está justamente no fato de ela conseguir mostrar que, por baixo das maquiagens reluzentes e roupas chamativas, aqueles jovens são tão sem respostas como qualquer outro.