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

Vestido de Jenna em 'De Repente 30' é novo ícone da nostalgia dos anos 2000

Jennifer Garner com o vestido Versace em "De Repente 30" - Divulgação
Jennifer Garner com o vestido Versace em "De Repente 30" Imagem: Divulgação

De Nossa

30/11/2021 13h13

A renascença Y2K, como é chamado o movimento de recuperação das tendências de moda dos anos 2000 pela geração Z, transformou o vestido "arco-íris" de Jenna Rink (Jennifer Garner) em "De Repente 30" em novo objeto de desejo.

O modelo primavera/verão 2003 da Versace que cruzou as arelas pela primeira vez em 2002 já foi recuperado, seja em sua glória original ou em cópia, por estrelas como Ariana Grande e Christa B. Allen, a atriz que viveu Jenna aos 13 no filme.

A cantora levou sua Jenna ao palco do "The Voice", no início de novembro, onde exibiu o look em uma ocasião que fez jus à personagem, afinal ela vestiu a peça multicolorida justamente para dançar "Thriller".

Já a homenagem não ou despercebida pela própria Jennifer Garner, que fez questão de respostar o look e comentar que "conhece aquele vestido".

No último Halloween, o Dia das Bruxas nos EUA, surgiu no TikTok uma enxurrada de fantasias em homenagem a um dos visuais mais bem lembrados dos anos 2000, impulsionadas justamente por uma geração mais jovem, como é o caso da TikToker Kate Barlett, que diz que "Jenna Rink é sua mãe".

A hashtag do filme na plataforma, aliás, já acumula 168,5 milhões de visualizações de milhares de vídeos que trazem, em sua maioria, recriações dos looks de Jennifer Garner.

Uma das usuárias que faz coro ao movimento é a própria Christa B. Allen. No ano ado, ela contou em suas redes que comprou uma versão do vestido pela internet e o usou como fantasia também no Halloween.

Aproveitando que em 2021 ela chegou ao seu 30º aniversário, a idade de Jenna no filme, a atriz voltou a postar outros vídeos com a peça nos últimos meses convidando os seguidores para uma espécie de festa virtual, em que todos se vestiriam como a personagem para celebrar.

@christaallen

? do you think they made it $13 on purpose #13goingon30

? The Purge - Demetrius X

A figurinista de "De Repente 30" contou ao jornal The New York Times que tem recebido imagens frequentemente de pessoas caracterizadas em algum nível, de adolescentes a drag queens, à la Jenna.

"Já recebi mensagens de adolescentes com podcasts de moda na Espanha e no Brasil me pedindo entrevistas sobre as roupas, me mandando fotos perguntando onde eu consegui o vestido."

Para Marian Park, estrategista de conteúdo jovem da consultoria de tendências WGSN, é comum atualmente que celebridades e influenciadores procurem peças de arquivo associadas com momentos da cultura pop dos anos 2000, mas a significância do vestido vai além.

"Ele não é tanto uma fantasia, como [um símbolo] de opulência e decadência", disse à publicação. Por isso, assim como os looks cheios de jeans e brilhos de Britney Spears, pode ter quem não conheça a referência original, mas o reinado fashion de Jenna se mantém na relevância da estética da década para um novo público.