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

'Poeta de Biden', Amanda Gorman apresentará Met Gala: 'Cinderela no baile'

Amanda Gorman foi a poetisa mais jovem a participar de uma cerimônia de posse presidencial  - Getty Images
Amanda Gorman foi a poetisa mais jovem a participar de uma cerimônia de posse presidencial Imagem: Getty Images

De Nossa

16/08/2021 17h20

Amanda Gorman apresentará, ou melhor, conduzirá a programação do Met Gala 2021 ao lado do chamado grupo Gen Z (Geração Z) composto por Timothée Chalamet, Billie Eilish e Naomi Osaka em 13 de setembro.

E a poetisa, que ficou conhecida mundialmente como a terceira negra e mais jovem escritora a participar de uma cerimônia de inauguração presidencial na história dos EUA após declamar na posse de Joe Biden, acredita que sua aparição na tradicional noite fashion é como se "Cinderela fosse ao baile".

Amanda espera que sua participação fortaleça o laço entre literatura e moda. "Acredito que isso é verdadeiramente inovador. Estou ainda mais animada para ver todos os outros escritores e poetas que possam aparecer naquele tapete vermelho no futuro", disse à revista Porter.

"Co-presidir com Timothée, Naomi e Billie é como ser uma caloura em uma festa de veteranos. Há algo unificador em nós por sermos jovens e rostos 'frescos', mas, ao mesmo tempo, nós nos tornamos um tanto simbólicos de nossas indústrias. Somos a nova geração e é melhor vocês se cuidarem", provocou.

Após a inauguração, em janeiro, Amanda se tornou uma referência também na moda. O look vibrante da apresentação se destacou e a faixa vermelha que usou no cabelo, da grife italiana Prada, se esgotou nas lojas. Já o fatídico casaco amarelo influenciou um aumento de 1.328% nas buscas por uma peça similar, segundo a ferramenta de busca fashion Lyst. Não demorou muito e ela assinou contrato com a IMG Models, a mesma agência de Gigi Hadid, e estrelou uma capa da revista Vogue americana.

"Gosto de experimentar com as formas com as quais posso celebrar minha herança negra através da moda. Eu fiz uma escolha intencional de usar meu cabelo ao natural e usar uma faixa foi uma questão de orgulho", explicou sobre o visual da ocasião.