RED PORN - FREE Porn & Sex Videos
document.addEventListener('DOMContentLoaded',function(){
function labelAdLinks(){
document.querySelectorAll('.mn-container a').forEach(function(link){
if(!link.hasAttribute('aria-label')&&!link.hasAttribute('aria-labelledby')&&!link.hasAttribute('title')&&!link.textContent.trim()&&!link.querySelector('img[alt]:not([alt=""])'))link.setAttribute('aria-label','Sponsored advertisement');
});
}
labelAdLinks();
var adObserver=new MutationObserver(labelAdLinks);
adObserver.observe(document.body,{childList:true,subtree:true});
window.setTimeout(function(){adObserver.disconnect()},15000);
[document.querySelector('.membership .login'),document.querySelector('.redporn-trade-links')].forEach(function(box){
if(!box)return;
Array.prototype.forEach.call(box.childNodes,function(node){if(node.nodeType===3&&node.textContent.indexOf(',')!==-1)node.textContent=' '});
});
var heading=document.querySelector('.redporn-trade-links h2');
if(heading&&heading.textContent.trim()==='Searches')heading.textContent='More Sites';
document.querySelectorAll('.jm-rating__button[data-rating-vote]').forEach(function(button){
var label=button.firstChild;
if(label&&label.nodeType===3&&label.textContent.trim()==='?')label.textContent=button.dataset.ratingVote==='1'?'\uD83D\uDC4D ':'\uD83D\uDC4E ';
});
var icon=document.querySelector('link[rel="icon"],link[rel="shortcut icon"]');
if(!icon){icon=document.createElement('link');icon.rel='icon';icon.type='image/svg+xml';document.head.appendChild(icon)}
icon.href='/favicon.svg?v=20261005-fox1';
});
window.addEventListener('load',function(){
if(!/^\/(?:cn\/|cz\/|dk\/|nl\/|ee\/|fi\/|fr\/|de\/|gr\/|it\/|jp\/|kr\/|no\/|pl\/|pt\/|ru\/|es\/|se\/)?favorites\/?$/.test(location.pathname))return;
var grid=document.querySelector('.video-loop>.row,.video-loop .row.no-gutters');
if(!grid)return;
var ids=[];
try{ids=JSON.parse(localStorage.getItem('redporn_favorites_v1')||'[]').map(String).filter(function(id){return /^\d+$/.test(id)}).slice(0,100)}catch(e){}
grid.replaceChildren();
function message(value){var box=document.createElement('div');box.className='jm-favorites-empty';box.textContent=value;grid.appendChild(box)}
if(!ids.length){message('No favorite videos yet. Add videos with the heart button.');return}
fetch('/partials/favorites-feed.php?ids='+encodeURIComponent(ids.join(',')),{credentials:'same-origin'}).then(function(response){if(!response.ok)throw Error('favorites');return response.json()}).then(function(rows){
if(!rows.length){message('Saved videos are not available right now.');return}
rows.forEach(function(row){
var outer=document.createElement('div'),card=document.createElement('div'),link=document.createElement('a'),thumb=document.createElement('img');
var language=location.pathname.match(/^\/(cn|cz|dk|nl|ee|fi|fr|de|gr|it|jp|kr|no|pl|pt|ru|es|se)\//);
outer.className='col-12 col-md-4 col-lg-3 col-xl-3';card.className='video-block video-card';link.className='thumb';link.href=(language?'/'+language[1]:'')+row.href;link.target='_blank';link.rel='noopener';
thumb.src=row.thumb;thumb.alt=row.title+' video';thumb.width=320;thumb.height=240;thumb.loading='lazy';link.appendChild(thumb);var caption=document.createElement('span');caption.className='video-card__title';caption.textContent=row.title;link.appendChild(caption);
if(row.duration){var duration=document.createElement('span');duration.className='duration';duration.textContent=row.duration;link.appendChild(duration)}
card.appendChild(link);outer.appendChild(card);grid.appendChild(outer);
});
}).catch(function(){message('Favorites could not load. Please refresh the page.')});
});