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

Estranhos do bem: criaturas fantásticas viram objetos de decoração

Lucas Careli dá vida a criaturas estranhas, mas simpáticas, que se transformam em objetos para o uso cotidiano dentro de casa - Reprodução Instagram
Lucas Careli dá vida a criaturas estranhas, mas simpáticas, que se transformam em objetos para o uso cotidiano dentro de casa Imagem: Reprodução Instagram

Carol Scolforo

Colaboração para Nossa

12/01/2021 04h00

O Bestiário

O Bestiário

Quem é

Lucas Careli é formado em arquitetura. Atuou por 10 anos como arquiteto até assumir o lado de artista autodidata à frente da marca O Bestiário, que cria objetos escultóricos de resina.

Com seu sorriso inocente e simpático, essas criaturas estranhas parecem ter brotado do reino fungi de alguma floresta ou saltaram da tela dos filmes de Tim Burton e seus personagens surreais. Porém, elas surgiram mesmo é na cabeça de Lucas Careli, que sempre foi fascinado por ficção e fantasia.

Do pai, que é pintor, ele herdou a abertura para a arte e as tintas. Logo, tornou-se um hobby criar animais aos quais ele nem sabia dar nomes. "Foi natural me expressar assim", diz.

Porta Joias Começo - Arquivo Pessoal - Arquivo Pessoal
Porta Joias Começo
Imagem: Arquivo Pessoal
Porta-chaves Gancho-Pança - Arquivo Pessoal - Arquivo Pessoal
Porta-chaves Gancho-Pança
Imagem: Arquivo Pessoal

Mas só há três anos O Bestiário, sua marca que reúne as criaturas, nasceu. Antes ele trabalhou em um escritório de arquitetura, onde se dedicava ao design de mobiliário, por 10 longos anos. Formado na área, ele não via muitas perspectivas onde estava e resolveu investir na arte, com a rescisão do contrato.

Deu certo: Lucas ou a produzir suas esculturas com resina e a dar funcionalidade a elas. Tornaram-se porta-joias, porta-chaves, incensários, vasos de plantas e recentemente um jogo de xadrez. Nas feiras, onde divulgava o trabalho no começo, havia o estranhamento, mas logo a aceitação.

"Nunca imaginei esse positivo. Antes pensava que ninguém ia comprar. Hoje trabalho só com isso".

Em uma semana uma criatura fica pronta - Lucas faz tudo, desde a criação, ando pelo Instagram @o.bestiario , até a parte burocrática.

"Tento fazer uma nova por mês e nesse ano quero fazer peças maiores", diz ele, inspirado, mas com pés firmes no chão de seu reino. "Como sou meu próprio chefe, tento não me sobrecarregar e não ser um chefe ruim comigo mesmo", ri.

@s que me inspiram

@duas.maos

“Guilherme Amaral, meu namorado, cria no mesmo espaço que eu e dividimos muito conhecimento. Ele me inspira ao criar bonecas articuladas que são muito difíceis de fazer. Amo muito.”

@calmasaopaulo

“A marca fica em São Paulo, de roupas agênero, cria as próprias estampas. Kelly faz modelagem e Adrien cuida das vendas e da direção artística e me inspira por se renovarem sempre nas padronagens e na forma de vestir.”