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

Jovem recebe 'planilha do Excel' cobrando gastos do primeiro encontro

A jornalista Silvia Vasconcelos, 31 anos - Reprodução/Instagram
A jornalista Silvia Vasconcelos, 31 anos Imagem: Reprodução/Instagram

Rute Pina

De Universa, em São Paulo

15/05/2022 15h05

"Café da manhã, R$ 74,49. Hospedagem, R$ 147. Cervejas, R$ 60,42. Mais o jantar e outros gastos, o valor final da dívida foi de R$ 45,55."

A conta do date chegou para a jornalista Silvia Vasconcelos, 31 anos, dois dias depois do encontro. E em formato de Excel. A jovem viralizou no TikTok após contar a história da planilha que recebeu dois dias depois de um primeiro encontro.

"Conheci esse cara através de um aplicativo e a gente estava conversando no ano ado, no auge da pandemia, e eu não queria ir para um lugar lotado. Ele deu a ideia, então, de alugar Airbnb, escolheu e reservou o local", conta ela. "Levei algumas coisas para o café da manhã, comprei cerveja e amos uma diária lá".

@silsvasconcelos

A mulher hétero não tem um dia de paz

? Undererê - Ines Brasil

Dois dias depois, ela conta que o cara mandou uma mensagem perguntando o quanto ela havia gastado. "Eu disse que não precisava se importar, mas aí ele disse que era para juntar tudo e para dividir — sendo que a ideia do Airbnb foi dele e em nenhum momento ele contou que rolaria uma divisão. Do nada, chegou uma planilha tosca me cobrando R$ 45,55", conta ela, rindo da situação.

"Primeira coisa que pensei quando abri a planilha foi 'não é possível o que está acontecendo'. Mandei mensagem para todas as amigas, que riram muito do que aconteceu. Virou uma piada interna do grupo."

"Talvez ele fosse metódico mesmo ou estivesse precisando muito do dinheiro, acontece. Mas faltou comunicação, já que ele reservou e escolheu o Airbnb, nem me consultou se aquele local estava dentro do meu bolso, se eu poderia pagar ou não

Há um mês, em abril, a jornalista decidiu compartilhar a história depois que viu uma trend no TikTok sobre dates ruins. Logo foram mais de 100 mil visualizações. "Não esperava essa proporção que tomou", conta.

Com a repercussão nas redes, ela diz que vieram muitos comentários machistas, também. "Alguns comentários dizendo 'ah, mas vocês não lutaram tanto para ter direitos iguais e estão reclamando aqui?'. Mas o meu problema não foi com a divisão, mas a forma como ele lidou com a situação e o jeito como me comunicou", conclui.

Silvia conta que, geralmente, ela não se importa (e até prefere) dividir a conta. Mas que achou a situação inusitada por chegar uma cobrança dias depois — e quando ambos já tinham tido gastos com o encontro.

O relacionamento não prosperou. A jornalista conta que pagou a conta com os centavos e, depois, parou de seguir o ex-pretendente nas redes sociais. "O date, no dia, foi bom. Mas a gente não tinha muito assunto durante nem depois. Ele é o famoso cara que manda 'foguinho' e acha que está conversando", brinca.

Após o episódio, ela conta que ou a se comunicar melhor com quem conhecia pelos apps. "Comecei a perguntar, um pouco antes de sair, onde era o local, se era um restaurante caro, por exemplo. Quando a pessoa diz que quer me buscar, eu falo que não precisa — não quero ninguém me cobrando a gasolina."