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

Apê alugado ganha personalidade com cores serenas e portais pintados

Em seu apartamento alugado, Roberta Artiolli completou o "bingo da quarentena" em decoração personalizada - Arquivo Pessoal
Em seu apartamento alugado, Roberta Artiolli completou o "bingo da quarentena" em decoração personalizada Imagem: Arquivo Pessoal

Carol Scolforo

Colaboração para Nossa

10/12/2020 04h00

Morar é "...sobre afeto. É sobre construir um ambiente acolhedor, um refúgio. Morar não é sobre cartório nem sobre propriedade. E pode ser pequeno, grande, comprado ou alugado. Não importa desde que seja lá o lugar que te abraça e te protege de tudo que está porta afora".

É assim que Roberta Artiolli começa a definir sua relação com o apartamento alugado de 90 m² em São Paulo, onde vive com o marido Bruno e as cadelas Duda e Paçoca. Ela mesma planejou toda a decoração, pensando em cores claras e pinturas geométricas.

Hits da quarentena

Roberta Artiolli - Arquivo Pessoal - Arquivo Pessoal
Roberta Artiolli
Imagem: Arquivo Pessoal

Ao evitar excessos, Roberta dá espaço à serenidade.

O que mais me conecta com a sensação de aconchego é o que vem da natureza: minhas plantas, meus macramês que amo produzir, meus móveis, o piso de madeira", conta.

Plantas compõem decoração do apê de Roberta - Arquivo Pessoal - Arquivo Pessoal
Plantas compõem decoração do apê de Roberta
Imagem: Arquivo Pessoal

No bingo decorativo da quarentena, ela preenche quase todos os itens que fizeram de 2020 o ano da casa.

Aliás, as pinturas geométricas são uma sensação no Instagram @meu.alugado, onde ela mostra todos os ângulos da renovação. Veja lá o arco da entrada, um portal no quarto de hóspedes e um círculo que atua como cabeceira no quarto do casal. Todos em tons pastel, que levam imensa sensação de tranquilidade ao lugar.

Tudo no lugar

Nada de poluição visual também. "Não gosto de nada que perturbe demais os meus sentidos, como objetos escondidos atrás de móveis (sabe aquela de aproveitar aquele cantinho do quarto para guardar uma coisinha mais feinha? Detesto!", ri.

Quando cada coisa tem seu lugar, fica mais fácil - e agradável - dar destaque a peças mais importantes. Por isso, cuide bem do que entra no seu lar e doe o que não tiver mais a cara dele. "Essa busca pelo equilíbrio pauta toda a minha vida, muito além da decoração", aconselha.

Dicas da Roberta para decorar com personalidade

  • Ressignifique. "Busque objetos de decoração com significado: algo que foi da família ou as lembranças de viagem dão personalidade à decoração."
  • Visite o ado. "Compre móveis de brechó e reforme, se for necessário, no melhor estilo DIY."
  • Pinte sem medo. "Busque por pinturas menores nas paredes e que setorizem ambientes. É possível fazer muita coisa com uma lata pequena de tinta."
  • Reuse. "Dê novos usos a objetos que seriam descartados, como uma garrafa de azeite que vira um vaso de flores para ir sobre a mesa".
  • "Plantíneas". "Abuse das plantas e peça mudas delas aos conhecidos, para plantá-las em terra ou água, espalhando por toda parte da casa que tiver boa iluminação."

@s que me inspiram

@vren1984

Essa casa alemã me inspira pela sensação de aconchego que ela transmite, ao revelar ambientes do dia a dia de um jeito encantador.

#mybdrm

Mostra diversos quartos pelo mundo. Cada um me desperta uma sensação diferente e me ensina um novo jeito de olhar para o próprio quarto.