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

Dá licença, Barbiecore: tudo sobre o vestido "mamilos livres" de Dua Lipa

Dua Lipa na première de "Barbie"em Los Angeles - Michael Buckner/Variety via Getty Images
Dua Lipa na première de "Barbie"em Los Angeles Imagem: Michael Buckner/Variety via Getty Images

Rener Montana

Colaboração para Nossa

10/07/2023 15h23

Além de Margot Robbie, Dua Lipa parou o tapete rosa da première do filme "Barbie" em Los Angeles, nos Estados Unidos. A cantora britânica foi um dos nomes mais comentados após o evento.

O motivo? A escolha do seu look: um vestido transparente, de malha vazada e brilhante, que deixava os mamilos livres e a calcinha rendada à mostra.

O vestido é uma criação da Bottega Veneta sob medida para a artista — que está presente como atriz e na trilha-sonora do longa-metragem dirigido por Greta Gerwig.

Estilizada por Lorenzo Posocco, Dua Lipa combinou seu visual com conjunto de joias — colar, pulseira e anel — com diamantes da Tiffany & Co. EMBED

Nas redes sociais, a cantora causou frenesi entre os usuários. As imagens em que ela aparece usando a peça viralizaram e geraram comparações, inclusive, com momentos icônicos brasileiros na internet.

Dua Lipa e Bottega Veneta é uma combinação de sucesso. Apostando no clássico rosa de Barbie desta vez, em uma das mais recentes publicações feitas pela cantora no Instagram, ela aparece com um look da grife em veludo, de decote redondo.

Para complementar o visual, a britânica investiu em botas de cano alto e bolsa prateada — órios que, combinados, somam cerca de R$ 68 mil.

Dua Lipa | Bottega Veneta - Reprodução/Instagram - Reprodução/Instagram
Dua Lipa | Bottega Veneta
Imagem: Reprodução/Instagram
Dua Lipa | Bottega Veneta - Reprodução/Instagram - Reprodução/Instagram
Dua Lipa | Bottega Veneta
Imagem: Reprodução/Instagram

Em outros looks Bottega, usados por Dua Lipa, a transparência também já se fez presente. Ainda em clima de festa, ela desfilou um slip dress branco de renda com detalhes em paetê, combinando com luvas opera e botas prateadas. A peça faz parte da coleção Outono/Inverno 2023, assinada pelo diretor criativo Matthieu Blazy.

Dua Lipa | Bottega Veneta - Reprofução/Instagram - Reprofução/Instagram
Dua Lipa | Bottega Veneta
Imagem: Reprofução/Instagram
Bottega Veneta | Outono/Inverno 2023 - Divulgação - Divulgação
Bottega Veneta | Outono/Inverno 2023
Imagem: Divulgação

Em uma versão mais social — embora ainda fashionista, que chamou a atenção dos seus seguidores no Instagram, a britânica exibiu visual de camisa oversized, combinada com botas de cano alto branca e a bolsa Kalimero, à venda por US$ 7,5 mil, cerca de R$ 36 mil.

Dua Lipa | Bottega Veneta - Reprodução/Instagram - Reprodução/Instagram
Dua Lipa | Bottega Veneta
Imagem: Reprodução/Instagram
Bottega Veneta | Outono/Inverno 2023 - Reprodução/Instagram - Reprodução/Instagram
Bottega Veneta | Outono/Inverno 2023
Imagem: Reprodução/Instagram