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

Conheça "coquetéis de mentira" e dê um descanso para o fígado na quarentena

Quer dar um tempo no álcool? Coquetéis de mentirinha ajudam nessa empreitada - Getty Images
Quer dar um tempo no álcool? Coquetéis de mentirinha ajudam nessa empreitada
Imagem: Getty Images

Pedro Marques

Colaboração para Nossa

08/05/2020 04h00

Beber em casa tem sido a única opção nos últimos tempos e, claro, tem gente exagerando — tem até meme circulando nas redes sociais dizendo que os bares precisam reabrir para que as pessoas deem uma maneirada no álcool. Como ainda vai levar um tempo para que as coisas voltem ao normal, dar um descanso pro corpo é fundamental (inclusive é recomendação da Organização Mundial de Saúde).

Para essas horas, vale a pena apostar no mocktail, a versão moderna do drinque sem álcool. O nome em inglês é uma junção das palavras "mock" e "cocktail" e sugere um "coquetel falso".

É essa a principal diferença entre as bebidas com e sem álcool: um mocktail parece com um drinque e não é só suquinho, como explica o bartender Marco De La Roche, editor do portal Mixology News, voltado para os profissionais do setor.

Mocktails iniciam uma nova fase para os drinques sem álcool - Unsplash - Unsplash
Mocktails iniciam uma nova fase para os drinques sem álcool
Imagem: Unsplash
"Os coquetéis sem álcool de 1990 a 2010 eram basicamente misturas desequilibradas de sucos concentrados, em camadas, com decorações espalhafatosas. Já os coquetéis sem álcool dos últimos anos tem a função de esconder visualmente que é um mocktail, ou seja, não deixar o cliente sem álcool exposto no bar, além de que se busca um perfil de sabor mais adulto, maduro e equilibrado. A importância da apresentação é a conexão com um drinque, e não com um suco", afirma.

Tendência (mesmo antes da pandemia)

E a opção por um coquetel elaborado, porém sem álcool, tem aumentado bastante. "O estilo de vida mais saudável, restrições de consumo para dirigir e a consciência de que uma boa noite não precisa ser, necessariamente, regada a álcool estão fazendo com que as pessoas procurem bebidas bem trabalhadas, mas que não tirem o glamour e o prazer de segurar um coquetel na mão", diz La Roche.

Nogroni, versão "clean" do Negroni - Divulgação - Divulgação
Nogroni, versão "clean" do Negroni
Imagem: Divulgação
Esse movimento dos consumidores tem inclusive despertado a atenção de grandes nomes do segmento. No fim do ano ado, a Diageo, que tem em seu portfólio marcas como Smirnoff, Tanqueray e Ypióca, comprou a Seedlip, que faz destilados não-alcoólicos. A empresa tem seis rótulos, entre eles o Spice 94 e o Grove 94, que podem ser usados como substitutos do gim. Há também o Nogroni, versão "clean" do Negroni.

Lá fora há outras marcas, como a Ritual Zero Proof, que oferece alternativas à tequila, ao uísque e ao gim, e a Mingle, que tem mocktails prontos, como Mojito e Moscow Mule. Esses produtos não estão à venda no Brasil, e a alternativa é fazer você mesmo os seus drinques.

Desafio para bartenders

Para La Roche, pode ser até mais complicado preparar um bom mocktail do que um bom drinque.

"É preciso criar uma harmonização que traga frescor, equilibrio entre docura e acidez, um certo toque seco no paladar para fazer as vezes do álcool e muita criatividade na escolha dos ingredientes", ensina.

Ainda assim, não é algo difícil como física quântica, e você pode ir testando e pegando o jeito. Para começar, vale experimentar o French Smash, criado por De La Roche. A receita você confere a seguir.