Wanessa Camargo e Kyra Gracie se reencontram após suposto climão: “Deu ruim”
Wanessa Camargo e Kyra Gracie, esposa de Malvino Salvador se reencontraram, na madrugada deste domingo (13/9), em um festival de música que acontece no Rio de Janeiro. As famosas posaram juntas e brin...
Wanessa Camargo e Kyra Gracie, esposa de Malvino Salvador se reencontraram, na madrugada deste domingo (13/9), em um festival de música que acontece no Rio de Janeiro. As famosas posaram juntas e brincaram sobre o suposto climão que teriam vivido recentemente, em que a lutadora teria se incomodado com a cantora, durante um dos shows do evento.
Na foto publicada por Wanessa, Kyra aparece dando um “mata-leão” na cantora, enquanto as duas aparecem sorrindo. “Ih… deu ruim. Ou melhor… deu bom! (Risos). Duas mulheres fortes, seguras de quem são e que sabem que a verdade sempre fala mais alto que qualquer fake news. E de quebra, ainda rolou uma aula de defesa pessoal”, escreveu a famosa.
(function () {
var AD_UNIT = 'ld-m-art-r1-01';
var PLACEMENT = '846612';
var DEVICE = 'mobile';
var MIN_H = 280;
var done = false;
function rightDevice() {
var isMobile = window.matchMedia
? window.matchMedia('(max-width: 767px)').matches
: (document.documentElement.clientWidth || 0) < 768;
return DEVICE === 'mobile' ? isMobile : !isMobile;
}
function box() {
return document.getElementById(AD_UNIT);
}
function hide() {
var b = box();
if (b) b.style.display = 'none';
}
function register() {
if (done) return;
done = true;
if (!rightDevice()) {
hide();
return;
}
var b = box();
if (b) {
b.style.minHeight = MIN_H + 'px';
}
window.ANConfig = window.ANConfig || {};
window.ANConfig.placements = window.ANConfig.placements || [];
window.ANConfig.placements.push({
adUnitId: AD_UNIT,
propertyId: '105130',
placementId: PLACEMENT,
data: {},
consent: true,
onLoad: function (adUnitId) {},
onFail: function (adUnitId) {
hide();
}
});
setTimeout(function () {
var c = box();
if (c && !c.getElementsByTagName('iframe').length) {
hide();
}
}, 6000);
}
var C = window.__ldAdConsent;
if (!C) {
C = window.__ldAdConsent = {
subs: [],
fired: false
};
C.granted = function () {
var v = window.LD_AD_CONSENT;
return v === true ||
v === 1 ||
v === 'true';
};
C.fire = function () {
if (C.fired) return;
C.fired = true;
if (C.poll) {
clearInterval(C.poll);
C.poll = null;
}
for (var i = 0; i < C.subs.length; i++) {
try {
C.subs[i]();
} catch (e) {}
}
var inject = function () {
if (document.getElementById('ap-js')) {
return;
}
var ver = new Date()
.toISOString()
.split(':')[0]
.replace(/\D/g, '');
var apjs = document.createElement('script');
apjs.type = 'text/javascript';
apjs.async = true;
apjs.setAttribute('id', 'ap-js');
apjs.src =
'https://central-brazil.ap.giraffa.tech/js/ap-gjanout.js?v=' + ver;
document.head.appendChild(apjs);
};
if (document.readyState === 'loading') {
document.addEventListener(
'DOMContentLoaded',
function () {
setTimeout(inject, 0);
}
);
} else {
setTimeout(inject, 0);
}
};
function onSignal(e) {
if (
(e && e.detail === true) ||
C.granted()
) {
C.fire();
}
}
window.addEventListener(
'ld-ad-consent',
onSignal
);
document.addEventListener(
'ld-ad-consent',
onSignal
);
if (typeof window.__tcfapi === 'function') {
window.__tcfapi(
'addEventListener',
2,
function (tcData, success) {
if (!success || !tcData) {
return;
}
if (
tcData.eventStatus !== 'tcloaded' &&
tcData.eventStatus !== 'useractioncomplete'
) {
return;
}
if (
tcData.purpose &&
tcData.purpose.consents &&
tcData.purpose.consents[1]
) {
C.fire();
}
}
);
}
C.poll = setInterval(function () {
if (C.fired) {
clearInterval(C.poll);
C.poll = null;
return;
}
if (C.granted()) {
C.fire();
}
}, 250);
}
C.subs.push(register);
if (C.fired) {
register();
} else if (C.granted()) {
C.fire();
}
})();
Veja as fotosAbrir em tela cheia Malvino Salvador, Kyra Gracie e Wanessa CamargoFoto: Reprodução/Instagram e YouTube Kyra Gracie é casada com Malvino SalvadorReprodução: Portal LeoDias/Instagram @kyragracie/Montagem Wanessa CamargoCrédito: Reprodução Wanessa Camargo e o namorado, Bruno BevanCrédito: Reprodução Instagram - Vinny Nunes
(function () {
var AD_UNIT = 'ld-m-art-r1-02';
var PLACEMENT = '846681';
var DEVICE = 'mobile'; /* 'mobile' or 'desktop' */
var MIN_H = 280; /* tallest size listed for this position */
var done = false;
/* This block belongs to one device. Mobile and desktop blocks may both sit in the
same responsive template: each checks the viewport and only the matching one
asks for an ad, so they never both render. Breakpoint 768px, tablets count as
desktop. If your template already renders per device server-side this is simply
a second guard and changes nothing. */
function rightDevice() {
var isMobile = window.matchMedia
? window.matchMedia('(max-width: 767px)').matches
: (document.documentElement.clientWidth || 0) < 768;
return DEVICE === 'mobile' ? isMobile : !isMobile;
}
function box() { return document.getElementById(AD_UNIT); }
function hide() { var b = box(); if (b) b.style.display = 'none'; }
/* Registers this position. Never called without a positive consent answer. */
function register() {
if (done) return;
done = true;
if (!rightDevice()) { hide(); return; }
var b = box();
if (b) b.style.minHeight = MIN_H + 'px'; /* reserve only now, never before */
window.ANConfig = window.ANConfig || {};
window.ANConfig.placements = window.ANConfig.placements || [];
window.ANConfig.placements.push({
adUnitId: AD_UNIT,
propertyId: '105130',
placementId: PLACEMENT,
data: {},
consent: true,
onLoad: function (adUnitId) {},
onFail: function (adUnitId) { hide(); }
});
/* Safety net: if nothing has rendered here shortly, release the space.
No position can leave a permanent blank gap, whatever goes wrong. */
setTimeout(function () {
var c = box();
if (c && !c.getElementsByTagName('iframe').length) hide();
}, 6000);
}
/* One shared coordinator per page, created by whichever block runs first.
Every block registers with it, so when consent arrives they all register in
the SAME tick and the loader is injected once, afterwards. The loader drains
its queue once, so a block that registered late would never be served. */
var C = window.__ldAdConsent;
if (!C) {
C = window.__ldAdConsent = { subs: [], fired: false };
C.granted = function () {
var v = window.LD_AD_CONSENT;
return v === true || v === 1 || v === 'true';
};
C.fire = function () {
if (C.fired) return;
C.fired = true;
if (C.poll) { clearInterval(C.poll); C.poll = null; }
for (var i = 0; i < C.subs.length; i++) {
try { C.subs[i](); } catch (e) {}
}
var inject = function () { /* now, with all of them queued */
if (document.getElementById('ap-js')) return;
var ver = new Date().toISOString().split(':')[0].replace(/\D/g, '');
var apjs = document.createElement('script');
apjs.type = 'text/javascript';
apjs.async = true;
apjs.setAttribute('id', 'ap-js');
apjs.src = 'https://central-brazil.ap.giraffa.tech/js/ap-gjanout.js?v=' + ver;
document.head.appendChild(apjs);
};
/* The loader drains its queue once, so it must not be fetched while the page is
still parsing: blocks further down would register after the drain and be lost.
Consent known before the body parses is the normal returning-visitor case. */
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function () { setTimeout(inject, 0); });
} else {
setTimeout(inject, 0);
}
};
function onSignal(e) {
if ((e && e.detail === true) || C.granted()) C.fire();
}
window.addEventListener('ld-ad-consent', onSignal);
document.addEventListener('ld-ad-consent', onSignal); /* the event does not bubble */
/* 2. IAB TCF v2, used automatically if it ever resolves. Purpose 1 gates storing
and accessing information on the device, which ad serving requires. Consent
is required whether or not gdprApplies is set: gdprApplies being false is
never treated as permission. (Measured here 28 Aug 2026: it is true.) */
if (typeof window.__tcfapi === 'function') {
window.__tcfapi('addEventListener', 2, function (tcData, success) {
if (!success || !tcData) return;
if (tcData.eventStatus !== 'tcloaded' &&
tcData.eventStatus !== 'useractioncomplete') return;
if (tcData.purpose && tcData.purpose.consents && tcData.purpose.consents[1]) C.fire();
});
}
/* 1. Your signal. Set window.LD_AD_CONSENT = true when consent is known.
The order does not matter and there is no time limit: this watch runs
until consent arrives or the page is closed. */
C.poll = setInterval(function () {
if (C.fired) { clearInterval(C.poll); C.poll = null; return; }
if (C.granted()) C.fire();
}, 250);
}
C.subs.push(register);
if (C.fired) register(); /* consent already given before this block parsed */
else if (C.granted()) C.fire();
})();
O suposto climão entre as duas teria acontecido no primeiro final de semana do festival. Na ocasião, Wanessa, que estava acompanhada do namorado, Bruno Bevan, teria dançado de maneira provocativa, ao ponto de incomodar Kyra, que estava no local junto com o marido, Malvino Salvador, e os dois teriam decidido ir embora.
A polêmica ganhou força nos últimos dias, mas acabou sendo negada pelo próprio casal. Kyra Gracie afirmou que o episódio não aconteceu e disse que não deixou o festival por causa de qualquer situação envolvendo Wanessa. Malvino também negou ter vivido um momento de ciúmes com a esposa por causa da cantora.
(function () {
var AD_UNIT = 'ld-m-art-r1-03';
var PLACEMENT = '846688';
var DEVICE = 'mobile'; /* 'mobile' or 'desktop' */
var MIN_H = 280; /* tallest size listed for this position */
var done = false;
/* This block belongs to one device. Mobile and desktop blocks may both sit in the
same responsive template: each checks the viewport and only the matching one
asks for an ad, so they never both render. Breakpoint 768px, tablets count as
desktop. If your template already renders per device server-side this is simply
a second guard and changes nothing. */
function rightDevice() {
var isMobile = window.matchMedia
? window.matchMedia('(max-width: 767px)').matches
: (document.documentElement.clientWidth || 0) < 768;
return DEVICE === 'mobile' ? isMobile : !isMobile;
}
function box() { return document.getElementById(AD_UNIT); }
function hide() { var b = box(); if (b) b.style.display = 'none'; }
/* Registers this position. Never called without a positive consent answer. */
function register() {
if (done) return;
done = true;
if (!rightDevice()) { hide(); return; }
var b = box();
if (b) b.style.minHeight = MIN_H + 'px'; /* reserve only now, never before */
window.ANConfig = window.ANConfig || {};
window.ANConfig.placements = window.ANConfig.placements || [];
window.ANConfig.placements.push({
adUnitId: AD_UNIT,
propertyId: '105130',
placementId: PLACEMENT,
data: {},
consent: true,
onLoad: function (adUnitId) {},
onFail: function (adUnitId) { hide(); }
});
/* Safety net: if nothing has rendered here shortly, release the space.
No position can leave a permanent blank gap, whatever goes wrong. */
setTimeout(function () {
var c = box();
if (c && !c.getElementsByTagName('iframe').length) hide();
}, 6000);
}
/* One shared coordinator per page, created by whichever block runs first.
Every block registers with it, so when consent arrives they all register in
the SAME tick and the loader is injected once, afterwards. The loader drains
its queue once, so a block that registered late would never be served. */
var C = window.__ldAdConsent;
if (!C) {
C = window.__ldAdConsent = { subs: [], fired: false };
C.granted = function () {
var v = window.LD_AD_CONSENT;
return v === true || v === 1 || v === 'true';
};
C.fire = function () {
if (C.fired) return;
C.fired = true;
if (C.poll) { clearInterval(C.poll); C.poll = null; }
for (var i = 0; i < C.subs.length; i++) {
try { C.subs[i](); } catch (e) {}
}
var inject = function () { /* now, with all of them queued */
if (document.getElementById('ap-js')) return;
var ver = new Date().toISOString().split(':')[0].replace(/\D/g, '');
var apjs = document.createElement('script');
apjs.type = 'text/javascript';
apjs.async = true;
apjs.setAttribute('id', 'ap-js');
apjs.src = 'https://central-brazil.ap.giraffa.tech/js/ap-gjanout.js?v=' + ver;
document.head.appendChild(apjs);
};
/* The loader drains its queue once, so it must not be fetched while the page is
still parsing: blocks further down would register after the drain and be lost.
Consent known before the body parses is the normal returning-visitor case. */
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function () { setTimeout(inject, 0); });
} else {
setTimeout(inject, 0);
}
};
function onSignal(e) {
if ((e && e.detail === true) || C.granted()) C.fire();
}
window.addEventListener('ld-ad-consent', onSignal);
document.addEventListener('ld-ad-consent', onSignal); /* the event does not bubble */
/* 2. IAB TCF v2, used automatically if it ever resolves. Purpose 1 gates storing
and accessing information on the device, which ad serving requires. Consent
is required whether or not gdprApplies is set: gdprApplies being false is
never treated as permission. (Measured here 28 Aug 2026: it is true.) */
if (typeof window.__tcfapi === 'function') {
window.__tcfapi('addEventListener', 2, function (tcData, success) {
if (!success || !tcData) return;
if (tcData.eventStatus !== 'tcloaded' &&
tcData.eventStatus !== 'useractioncomplete') return;
if (tcData.purpose && tcData.purpose.consents && tcData.purpose.consents[1]) C.fire();
});
}
/* 1. Your signal. Set window.LD_AD_CONSENT = true when consent is known.
The order does not matter and there is no time limit: this watch runs
until consent arrives or the page is closed. */
C.poll = setInterval(function () {
if (C.fired) { clearInterval(C.poll); C.poll = null; return; }
if (C.granted()) C.fire();
}, 250);
}
C.subs.push(register);
if (C.fired) register(); /* consent already given before this block parsed */
else if (C.granted()) C.fire();
})();
De acordo com Malvino, a saída antecipada do Rock in Rio ocorreu porque as filhas do casal estavam cansadas e com frio. No dia seguinte, ele e Kyra retornaram ao festival para acompanhar a programação.



Na foto publicada por Wanessa, Kyra aparece dando um “mata-leão” na cantora, enquanto as duas aparecem sorrindo. “Ih… deu ruim. Ou melhor… deu bom! (Risos). Duas mulheres fortes, seguras de quem são e que sabem que a verdade sempre fala mais alto que qualquer fake news. E de quebra, ainda rolou uma aula de defesa pessoal”, escreveu a famosa.
(function () {
var AD_UNIT = 'ld-m-art-r1-01';
var PLACEMENT = '846612';
var DEVICE = 'mobile';
var MIN_H = 280;
var done = false;
function rightDevice() {
var isMobile = window.matchMedia
? window.matchMedia('(max-width: 767px)').matches
: (document.documentElement.clientWidth || 0) < 768;
return DEVICE === 'mobile' ? isMobile : !isMobile;
}
function box() {
return document.getElementById(AD_UNIT);
}
function hide() {
var b = box();
if (b) b.style.display = 'none';
}
function register() {
if (done) return;
done = true;
if (!rightDevice()) {
hide();
return;
}
var b = box();
if (b) {
b.style.minHeight = MIN_H + 'px';
}
window.ANConfig = window.ANConfig || {};
window.ANConfig.placements = window.ANConfig.placements || [];
window.ANConfig.placements.push({
adUnitId: AD_UNIT,
propertyId: '105130',
placementId: PLACEMENT,
data: {},
consent: true,
onLoad: function (adUnitId) {},
onFail: function (adUnitId) {
hide();
}
});
setTimeout(function () {
var c = box();
if (c && !c.getElementsByTagName('iframe').length) {
hide();
}
}, 6000);
}
var C = window.__ldAdConsent;
if (!C) {
C = window.__ldAdConsent = {
subs: [],
fired: false
};
C.granted = function () {
var v = window.LD_AD_CONSENT;
return v === true ||
v === 1 ||
v === 'true';
};
C.fire = function () {
if (C.fired) return;
C.fired = true;
if (C.poll) {
clearInterval(C.poll);
C.poll = null;
}
for (var i = 0; i < C.subs.length; i++) {
try {
C.subs[i]();
} catch (e) {}
}
var inject = function () {
if (document.getElementById('ap-js')) {
return;
}
var ver = new Date()
.toISOString()
.split(':')[0]
.replace(/\D/g, '');
var apjs = document.createElement('script');
apjs.type = 'text/javascript';
apjs.async = true;
apjs.setAttribute('id', 'ap-js');
apjs.src =
'https://central-brazil.ap.giraffa.tech/js/ap-gjanout.js?v=' + ver;
document.head.appendChild(apjs);
};
if (document.readyState === 'loading') {
document.addEventListener(
'DOMContentLoaded',
function () {
setTimeout(inject, 0);
}
);
} else {
setTimeout(inject, 0);
}
};
function onSignal(e) {
if (
(e && e.detail === true) ||
C.granted()
) {
C.fire();
}
}
window.addEventListener(
'ld-ad-consent',
onSignal
);
document.addEventListener(
'ld-ad-consent',
onSignal
);
if (typeof window.__tcfapi === 'function') {
window.__tcfapi(
'addEventListener',
2,
function (tcData, success) {
if (!success || !tcData) {
return;
}
if (
tcData.eventStatus !== 'tcloaded' &&
tcData.eventStatus !== 'useractioncomplete'
) {
return;
}
if (
tcData.purpose &&
tcData.purpose.consents &&
tcData.purpose.consents[1]
) {
C.fire();
}
}
);
}
C.poll = setInterval(function () {
if (C.fired) {
clearInterval(C.poll);
C.poll = null;
return;
}
if (C.granted()) {
C.fire();
}
}, 250);
}
C.subs.push(register);
if (C.fired) {
register();
} else if (C.granted()) {
C.fire();
}
})();
Veja as fotosAbrir em tela cheia Malvino Salvador, Kyra Gracie e Wanessa CamargoFoto: Reprodução/Instagram e YouTube Kyra Gracie é casada com Malvino SalvadorReprodução: Portal LeoDias/Instagram @kyragracie/Montagem Wanessa CamargoCrédito: Reprodução Wanessa Camargo e o namorado, Bruno BevanCrédito: Reprodução Instagram - Vinny Nunes
(function () {
var AD_UNIT = 'ld-m-art-r1-02';
var PLACEMENT = '846681';
var DEVICE = 'mobile'; /* 'mobile' or 'desktop' */
var MIN_H = 280; /* tallest size listed for this position */
var done = false;
/* This block belongs to one device. Mobile and desktop blocks may both sit in the
same responsive template: each checks the viewport and only the matching one
asks for an ad, so they never both render. Breakpoint 768px, tablets count as
desktop. If your template already renders per device server-side this is simply
a second guard and changes nothing. */
function rightDevice() {
var isMobile = window.matchMedia
? window.matchMedia('(max-width: 767px)').matches
: (document.documentElement.clientWidth || 0) < 768;
return DEVICE === 'mobile' ? isMobile : !isMobile;
}
function box() { return document.getElementById(AD_UNIT); }
function hide() { var b = box(); if (b) b.style.display = 'none'; }
/* Registers this position. Never called without a positive consent answer. */
function register() {
if (done) return;
done = true;
if (!rightDevice()) { hide(); return; }
var b = box();
if (b) b.style.minHeight = MIN_H + 'px'; /* reserve only now, never before */
window.ANConfig = window.ANConfig || {};
window.ANConfig.placements = window.ANConfig.placements || [];
window.ANConfig.placements.push({
adUnitId: AD_UNIT,
propertyId: '105130',
placementId: PLACEMENT,
data: {},
consent: true,
onLoad: function (adUnitId) {},
onFail: function (adUnitId) { hide(); }
});
/* Safety net: if nothing has rendered here shortly, release the space.
No position can leave a permanent blank gap, whatever goes wrong. */
setTimeout(function () {
var c = box();
if (c && !c.getElementsByTagName('iframe').length) hide();
}, 6000);
}
/* One shared coordinator per page, created by whichever block runs first.
Every block registers with it, so when consent arrives they all register in
the SAME tick and the loader is injected once, afterwards. The loader drains
its queue once, so a block that registered late would never be served. */
var C = window.__ldAdConsent;
if (!C) {
C = window.__ldAdConsent = { subs: [], fired: false };
C.granted = function () {
var v = window.LD_AD_CONSENT;
return v === true || v === 1 || v === 'true';
};
C.fire = function () {
if (C.fired) return;
C.fired = true;
if (C.poll) { clearInterval(C.poll); C.poll = null; }
for (var i = 0; i < C.subs.length; i++) {
try { C.subs[i](); } catch (e) {}
}
var inject = function () { /* now, with all of them queued */
if (document.getElementById('ap-js')) return;
var ver = new Date().toISOString().split(':')[0].replace(/\D/g, '');
var apjs = document.createElement('script');
apjs.type = 'text/javascript';
apjs.async = true;
apjs.setAttribute('id', 'ap-js');
apjs.src = 'https://central-brazil.ap.giraffa.tech/js/ap-gjanout.js?v=' + ver;
document.head.appendChild(apjs);
};
/* The loader drains its queue once, so it must not be fetched while the page is
still parsing: blocks further down would register after the drain and be lost.
Consent known before the body parses is the normal returning-visitor case. */
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function () { setTimeout(inject, 0); });
} else {
setTimeout(inject, 0);
}
};
function onSignal(e) {
if ((e && e.detail === true) || C.granted()) C.fire();
}
window.addEventListener('ld-ad-consent', onSignal);
document.addEventListener('ld-ad-consent', onSignal); /* the event does not bubble */
/* 2. IAB TCF v2, used automatically if it ever resolves. Purpose 1 gates storing
and accessing information on the device, which ad serving requires. Consent
is required whether or not gdprApplies is set: gdprApplies being false is
never treated as permission. (Measured here 28 Aug 2026: it is true.) */
if (typeof window.__tcfapi === 'function') {
window.__tcfapi('addEventListener', 2, function (tcData, success) {
if (!success || !tcData) return;
if (tcData.eventStatus !== 'tcloaded' &&
tcData.eventStatus !== 'useractioncomplete') return;
if (tcData.purpose && tcData.purpose.consents && tcData.purpose.consents[1]) C.fire();
});
}
/* 1. Your signal. Set window.LD_AD_CONSENT = true when consent is known.
The order does not matter and there is no time limit: this watch runs
until consent arrives or the page is closed. */
C.poll = setInterval(function () {
if (C.fired) { clearInterval(C.poll); C.poll = null; return; }
if (C.granted()) C.fire();
}, 250);
}
C.subs.push(register);
if (C.fired) register(); /* consent already given before this block parsed */
else if (C.granted()) C.fire();
})();
O suposto climão entre as duas teria acontecido no primeiro final de semana do festival. Na ocasião, Wanessa, que estava acompanhada do namorado, Bruno Bevan, teria dançado de maneira provocativa, ao ponto de incomodar Kyra, que estava no local junto com o marido, Malvino Salvador, e os dois teriam decidido ir embora.
A polêmica ganhou força nos últimos dias, mas acabou sendo negada pelo próprio casal. Kyra Gracie afirmou que o episódio não aconteceu e disse que não deixou o festival por causa de qualquer situação envolvendo Wanessa. Malvino também negou ter vivido um momento de ciúmes com a esposa por causa da cantora.
(function () {
var AD_UNIT = 'ld-m-art-r1-03';
var PLACEMENT = '846688';
var DEVICE = 'mobile'; /* 'mobile' or 'desktop' */
var MIN_H = 280; /* tallest size listed for this position */
var done = false;
/* This block belongs to one device. Mobile and desktop blocks may both sit in the
same responsive template: each checks the viewport and only the matching one
asks for an ad, so they never both render. Breakpoint 768px, tablets count as
desktop. If your template already renders per device server-side this is simply
a second guard and changes nothing. */
function rightDevice() {
var isMobile = window.matchMedia
? window.matchMedia('(max-width: 767px)').matches
: (document.documentElement.clientWidth || 0) < 768;
return DEVICE === 'mobile' ? isMobile : !isMobile;
}
function box() { return document.getElementById(AD_UNIT); }
function hide() { var b = box(); if (b) b.style.display = 'none'; }
/* Registers this position. Never called without a positive consent answer. */
function register() {
if (done) return;
done = true;
if (!rightDevice()) { hide(); return; }
var b = box();
if (b) b.style.minHeight = MIN_H + 'px'; /* reserve only now, never before */
window.ANConfig = window.ANConfig || {};
window.ANConfig.placements = window.ANConfig.placements || [];
window.ANConfig.placements.push({
adUnitId: AD_UNIT,
propertyId: '105130',
placementId: PLACEMENT,
data: {},
consent: true,
onLoad: function (adUnitId) {},
onFail: function (adUnitId) { hide(); }
});
/* Safety net: if nothing has rendered here shortly, release the space.
No position can leave a permanent blank gap, whatever goes wrong. */
setTimeout(function () {
var c = box();
if (c && !c.getElementsByTagName('iframe').length) hide();
}, 6000);
}
/* One shared coordinator per page, created by whichever block runs first.
Every block registers with it, so when consent arrives they all register in
the SAME tick and the loader is injected once, afterwards. The loader drains
its queue once, so a block that registered late would never be served. */
var C = window.__ldAdConsent;
if (!C) {
C = window.__ldAdConsent = { subs: [], fired: false };
C.granted = function () {
var v = window.LD_AD_CONSENT;
return v === true || v === 1 || v === 'true';
};
C.fire = function () {
if (C.fired) return;
C.fired = true;
if (C.poll) { clearInterval(C.poll); C.poll = null; }
for (var i = 0; i < C.subs.length; i++) {
try { C.subs[i](); } catch (e) {}
}
var inject = function () { /* now, with all of them queued */
if (document.getElementById('ap-js')) return;
var ver = new Date().toISOString().split(':')[0].replace(/\D/g, '');
var apjs = document.createElement('script');
apjs.type = 'text/javascript';
apjs.async = true;
apjs.setAttribute('id', 'ap-js');
apjs.src = 'https://central-brazil.ap.giraffa.tech/js/ap-gjanout.js?v=' + ver;
document.head.appendChild(apjs);
};
/* The loader drains its queue once, so it must not be fetched while the page is
still parsing: blocks further down would register after the drain and be lost.
Consent known before the body parses is the normal returning-visitor case. */
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function () { setTimeout(inject, 0); });
} else {
setTimeout(inject, 0);
}
};
function onSignal(e) {
if ((e && e.detail === true) || C.granted()) C.fire();
}
window.addEventListener('ld-ad-consent', onSignal);
document.addEventListener('ld-ad-consent', onSignal); /* the event does not bubble */
/* 2. IAB TCF v2, used automatically if it ever resolves. Purpose 1 gates storing
and accessing information on the device, which ad serving requires. Consent
is required whether or not gdprApplies is set: gdprApplies being false is
never treated as permission. (Measured here 28 Aug 2026: it is true.) */
if (typeof window.__tcfapi === 'function') {
window.__tcfapi('addEventListener', 2, function (tcData, success) {
if (!success || !tcData) return;
if (tcData.eventStatus !== 'tcloaded' &&
tcData.eventStatus !== 'useractioncomplete') return;
if (tcData.purpose && tcData.purpose.consents && tcData.purpose.consents[1]) C.fire();
});
}
/* 1. Your signal. Set window.LD_AD_CONSENT = true when consent is known.
The order does not matter and there is no time limit: this watch runs
until consent arrives or the page is closed. */
C.poll = setInterval(function () {
if (C.fired) { clearInterval(C.poll); C.poll = null; return; }
if (C.granted()) C.fire();
}, 250);
}
C.subs.push(register);
if (C.fired) register(); /* consent already given before this block parsed */
else if (C.granted()) C.fire();
})();
De acordo com Malvino, a saída antecipada do Rock in Rio ocorreu porque as filhas do casal estavam cansadas e com frio. No dia seguinte, ele e Kyra retornaram ao festival para acompanhar a programação.

Reprodução: Portal LeoDias/Instagram @kyragracie/Montagem

Crédito: Reprodução

Crédito: Reprodução Instagram - Vinny Nunes
PUBLICIDADE

