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

Marca lança primeira coleção de moda feita a partir do DNA de mulheres

A marca procurou um laboratório de genética e reuniu 19 influenciadoras digitais de várias regiões - Divulgação
A marca procurou um laboratório de genética e reuniu 19 influenciadoras digitais de várias regiões Imagem: Divulgação

De Universa

04/11/2019 13h02

Como a genética pode ser usada na moda? A Amaro lança hoje a primeira coleção de roupas desenvolvida a partir do mapeamento do DNA de mulheres brasileiras. Segundo a marca, a intenção é valorizar as características individuais de diferentes perfis femininos, o que significa fugir das tendências. São 57 peças, com preços entre R$ 100 e R$ 300.

A marca procurou um laboratório de genética e reuniu um time diverso de 19 mulheres, influenciadoras digitais, de várias regiões.

Após a coleta de amostras de saliva das personagens, foi feita a análise de mais de 700 mil regiões do DNA pelo método SNP (Single Nucleotide Polymorphism). Foram mapeadas informações como formas de lidar com estresse, preferências diurnas ou noturnas, habilidades matemáticas e níveis de impulsividade.

Para a geneticista Juliana Saquete, biomédica e especialista em biologia molecular e genética da Genera, o resultado é a personalização dos produtos, de acordo com as preferências e as características de cada um. As 19 mulheres analisadas e que inspiraram as roupas são: Maju Silva, Carol Rocha, Stella Yeshua, Loo Nascimento, Cris Paladino, Mel, Poliana Okimoto, Keila Gomes, Julia Ferreira, Camila Acchutti, Lian Tai, Lara Dias, Joana Cannabrava, Mari Maria, Gabie Fernandes, Gessica Justino, Fabi Justus, Vanessa Rozan e Suzana Ceridono.

Após o brainstorm entre estilistas, designer de estampas e a geneticista, a inspiração para o desdobramento dos dados genéticos se traduziu por meio das cores, tecidos, fluidez, estampas e modelagens.

Loo Nascimento - Divulgação - Divulgação
Loo Nascimento
Imagem: Divulgação

O time de criação desenvolveu as peças sem saber quais informações eram de cada personagem, para não influenciar no produto final.

Por exemplo, Loo Nascimento (na foto) apresentou impulsividade média, que foi traduzida em estampa marcante, modelagens leves e tecidos confortáveis de fibra natural, priorizando conforto, avaliando a forma de ela lidar com o estresse.