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

SPFW 25 anos: ex-detentos criam peças de crochê para coleção da Ponto Firme

Gustavo Frank

De Nossa

05/11/2020 16h40

O Projeto Ponto Firme, que completa cinco anos de existência levando seu design para dentro de uma unidade prisional, reforça o seu propósito de transformação social a partir da moda e do crochê.

Neste ano, por conta da pandemia, as aulas na Penitenciária Desembargador Adriano Marrey, em Guarulhos (SP), foram suspensas, mas os egressos representam o projeto, que participa pela terceira vez do São Paulo Fashion Week, nesta que será a edição comemorativa dos 25 anos, e conta com a supervisão do estilista Gustavo Silvestre.

"A mensagem que queremos ar é a construção de peças lindas, com muito significado, no meio desse caos que estamos vivendo. Vamos mostrar roupas com 'alma', cujo processo de confecção fez a diferença na vida de várias famílias e também no meio ambiente, já que estamos empregando crochê em peças ressignificadas e resíduos têxteis", diz Gustavo para Nossa.

Com a entrada no presídio bloqueada desde o início da quarentena, a coleção apresentada nesta edição do São Paulo Fashion Week foi desenvolvida com os egressos que fazem parte do Projeto Ponto Firme: Anderson Figueiredo, Anderson Joaquim e Thiago Araújo, que mostram como a atividade continua impactando positivamente suas vidas e de suas respectivas famílias.

As roupas foram confeccionadas por cada um deles e pelo Gustavo Silvestre em suas casas, e esse processo foi registrado em um vídeo que será divulgado juntamente com a coleção no dia do desfile, marcado para 5 de novembro, às 16h, contando como o ciclo de vida de uma roupa pode ser eterno.

O vídeo tem a direção de Laura Artigas, direção de arte de Karlla Girotto e direção de fotografia de Danilo Sorrino.

Uma grande novidade celebrada por Gustavo Silvestre e pelos participantes do Ponto Firme é que as peças desta coleção serão colocadas à venda nas lojas da NK Store.

"Diferente das últimas coleções, que as roupas não podiam ser comercializadas por serem desenvolvidas pelos detentos e envolverem questões burocráticas e legais, agora é a grande oportunidade de as pessoas poderem adquirir uma peça feita pelo Projeto Ponto Firme, da coleção apresentada no São Paulo Fashion Week", comemora Gustavo.

O projeto Ponto Firme

O estilista Gustavo Silvestre - Estadão Conteúdo - Estadão Conteúdo
O estilista Gustavo Silvestre
Imagem: Estadão Conteúdo

Desde 2015 o projeto Ponto Firme oferece formação técnica em crochê para sentenciados da Penitenciária Desembargador Adriano Marrey, em Guarulhos (SP). Desde as primeiras aulas contou com o apoio da Círculo S/A, que doa materiais para que os alunos possam aprender e se desenvolver.

Eles confeccionam tapeçarias, toalhas, redes, almofadas, amigurumi, roupas, órios, joias e o que mais a criatividade permitir. Ao final de cada módulo, com duração de seis meses, os alunos recebem um certificado de conclusão. Mais de 120 alunos já aram pelo projeto.

Os trabalhos realizados pelos alunos já foram expostos na SP-Arte, Pinacoteca de São Paulo, SPFW e até em Nova York.