<!DOCTYPE html><html lang="es"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="description" content="Límite Informativo: Tu fuente de noticias en vivo. La información más relevante de Posadas, Misiones, Argentina y el mundo. Noticias, deportes, política y la radio en directo."> <meta name="keywords" content="noticias, Posadas, Misiones, Argentina, Límite Informativo, radio en vivo, deportes, política, actualidad, información"> <meta name="author" content="Límite Informativo"> <meta name="robots" content="index, follow"> <meta name="geo.region" content="AR-N"> <meta name="geo.placename" content="Posadas"> <meta name="geo.position" content="-27.367; -55.897"> <meta name="ICBM" content="-27.367, -55.897"> <meta property="og:title" content="Límite Informativo - Noticias de Misiones y el Mundo"> <meta property="og:description" content="Tu fuente de noticias en vivo. La información más relevante de Posadas, Misiones, Argentina y el mundo. Noticias, deportes, política y la radio en directo."> <meta property="og:type" content="website"> <meta property="og:url" content="https://limiteinformativo.com"> <meta property="og:image" content="https://limiteinformativo.com/icono.png"> <meta property="og:locale" content="es_AR"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:site" content="@limiteinformativo"> <meta name="twitter:creator" content="@limiteinformativo"> <meta name="twitter:title" content="Límite Informativo - Noticias de Posadas, Misiones y el Mundo"> <meta name="twitter:description" content="Tu fuente de noticias en vivo. La información más relevante de Posadas, Misiones, Argentina y el mundo. Noticias, deportes, política y la radio en directo."> <meta name="twitter:image" content="/uploads/logoLimiteInformativo.png"> <title>Página no encontrada</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" xintegrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5207694529058458" crossorigin="anonymous"></script> <script async defer crossorigin="anonymous" src="https://connect.facebook.net/es_ES/sdk.js#xfbml=1&version=v23.0&appId=APP_ID"></script> <link rel="stylesheet" href="/assets/styles/app-MElU8fB.css"> <link rel="stylesheet" href="/assets/icons/all.min-z-L2sjV.css"> <link rel="manifest" href="/manifest.json"> <style> @keyframes pulse-green { 0% { opacity: 1; } 50% { opacity: 0.5; } 100% { opacity: 1; } } .live-pulse { animation: pulse-green 1.5s infinite; } /* Estilo para el banner de notificaciones */ .notification-prompt-banner { position: fixed; bottom: 20px; right: 20px; z-index: 1050; max-width: 350px; transition: all 0.5s ease-in-out; opacity: 1; transform: translateY(0); } .notification-prompt-banner.hidden { opacity: 0; transform: translateY(100px); display: none !important; /* Solución aplicada aquí */ } /* Estilo para la animación de éxito */ .notification-success-animation { background-color: #28a745; color: #fff; display: flex; align-items: center; justify-content: center; font-size: 24px; font-weight: bold; border-radius: 100%; width: 80px; height: 80px; animation: pop-in 0.3s ease-in-out forwards; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } @keyframes pop-in { 0% { transform: translate(-50%, -50%) scale(0); opacity: 0; } 100% { transform: translate(-50%, -50%) scale(1); opacity: 1; } } </style></head><body class="bg-light"> <div class="top-bar bg-black text-white py-1 d-none d-lg-block shadow-sm"> <div class="container d-flex justify-content-between align-items-center"> <span class="fw-bold"> <i class="fas fa-calendar-alt me-1" style="color: gray"></i> Sábado 13 de Junio de 2026 </span> <div> <a href="/login" class="text-white mx-2">Iniciar Sesión</a> </div> <div> <a href="" class="text-white mx-2" target="_blank" ><i class="fab fa-facebook-f"></i></a> <a href="" class="text-white mx-2" target="_blank" ><i class="fab fa-x-twitter "></i></a> <a href="" class="text-white mx-2" target="_blank" ><i class="fab fa-instagram"></i></a> </div> </div> </div> <header class="bg-primary-custom text-white py-3 shadow-sm"> <div class="container d-flex flex-wrap justify-content-between align-items-center"> <a href="/" class="navbar-brand mb-2 mb-md-0 d-flex align-items-center"> <img src="/uploads/logoLimiteInformativoW.png" alt="Logo Límite Informativo" style="height: 50px;"> </a> <div class="d-flex flex-column flex-md-row align-items-center flex-grow-1 justify-content-end"> <div class="d-flex align-items-center mb-2 mb-md-0 me-md-5"> <p class="mb-0 me-3">Radio en Vivo</p> <div id="radio-container" class="d-flex align-items-center"> <audio id="audio-player" preload="none"></audio> <button id="play-pause-button" class="btn btn-outline-primary-custom btn-sm me-2 text-white"> <i class="fas fa-play"></i> </button> <span id="live-indicator" class="text-success small"> <i id="live-icon" class="fas fa-rss me-1"></i>En vivo </span> <span id="error-message" class="text-danger small d-none"></span> </div> </div> <form action="/busqueda" method="GET" class="d-flex flex-grow-1 flex-md-grow-0"> <input type="search" name="q" class="form-control me-2" placeholder="Buscar..." aria-label="Search"> <button class="btn btn-outline-primary-custom text-white" type="submit">Buscar</button> </form> </div> </div> </header> <nav class="navbar navbar-expand-lg shadow-sm"> <div class="container"> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav w-100"> <li class="nav-item"> <a class="nav-link active" href="/contacto">Contáctenos</a> </li> </ul> </div> </div></nav> <main class="container my-4"> <div class="row"> <div class="col-lg-8"> <div class="error-container text-center"> <h1 class="error-code">404</h1> <p class="error-message">Ups... La página que buscas no existe.</p> <a href="/" class="btn btn-primary">Volver al inicio</a> </div> <style> .error-container { display: flex; flex-direction: column; justify-content: center; align-items: center; height: 80vh; } .error-code { font-size: 8rem; font-weight: bold; color: #0e1e57; animation: bounce 1.5s infinite; } .error-message { font-size: 1.5rem; margin-bottom: 20px; animation: fadeIn 2s ease-in-out; } @keyframes bounce { 0%, 20%, 50%, 80%, 100% { transform: translateY(0); } 40% { transform: translateY(-30px); } 60% { transform: translateY(-15px); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } </style> </div> <div class="col-lg-4"> <div class="col"> <div class="d-grid gap-4"> <img src="https://www.limiteinformativo.com/media/cache/sidebar_ad_image/uploads/Argentina-1-300x188.png" class="img-fluid rounded shadow-sm" alt="Somos Argentinos"> </div> </div> <div class="col"> <div class="d-grid gap-4 mt-1 mb-1"> <a href="https://streaminglocucionar.com/radio/apostoles991"><img src="https://www.limiteinformativo.com/media/cache/sidebar_ad_image/uploads/appDownload.png" class="img-fluid rounded shadow-sm" alt="Descargá nuestra app"></a> </div> </div> <div class="col"> <div class="d-grid gap-4"> <img src="https://www.limiteinformativo.com/media/cache/sidebar_ad_image/uploads/ligroupo-1-1758588164.jpg" alt="Logo LIGroup"> </div> </div> <div class="col"> <h2 class="section-title">Anuncios</h2> <div class="d-grid gap-4"> </div> </div> <div id="fb-root"></div> <div class="fb-page" data-href="https://www.facebook.com/limiteinformativo" data-tabs="timeline" data-width="" data-height="1200" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true"><blockquote cite="https://www.facebook.com/limiteinformativo" class="fb-xfbml-parse-ignore"><a href="https://www.facebook.com/limiteinformativo">Limite Informativo</a></blockquote></div> </div> </div></main> <div id="notification-prompt" class="notification-prompt-banner alert alert-info d-flex align-items-center justify-content-between p-3 rounded-xl shadow-md mb-4" style="display: none;"> <div class="d-flex align-items-center"> <i class="fas fa-bell me-3 text-2xl text-info"></i> <p class="mb-0">¿Quieres recibir notificaciones de noticias nuevas?</p> </div> <div> <button id="subscribe-button" class="btn btn-primary-custom btn-sm me-2">Sí, activar</button> <button id="dismiss-button" class="btn btn-outline-secondary btn-sm" aria-label="Descartar">No, gracias</button> </div></div> <footer class="bg-dark text-white py-5 mt-5"> <div class="container"> <div class="row"> <div class="col-md-4 mb-4"> <h5 class="fw-bold text-white mb-3">Contacto</h5> <ul class="list-unstyled text-white-50 small"> <li class="mb-2"> <i class="fas fa-envelope me-2"></i> <a href="/contacto" class="text-white-50 text-decoration-none"> Envíanos tu mensaje desde aquí </a> </li> </ul> </div> <div class="col-md-4 mb-4 text-md-center"> <h5 class="fw-bold text-white mb-3">Síguenos</h5> <ul class="list-unstyled d-flex justify-content-center"> </ul> <div> </div> </div> <div class="col-md-4 mb-4 text-md-end"> <img src="/uploads/logoLimiteInformativoW.png" alt="Logo Límite Informativo" style="height: 60px;"> <p class="text-white-50 small mt-3"> © 2026 Diario Límite Informativo. Todos los derechos reservados. </p> </div> </div> <div class="row"> <div class="col-12 text-center small"> <p class="mb-0 text-white-50"> </p> </div> </div> <hr class="border-secondary"> <div class="row"> <div class="col-12 text-center small"> <p class="mb-0 text-white-50"> Desarrollado por <a href="https://www.shophardware.com.ar" target="_blank" class="text-white text-decoration-none">Shop Hardware</a> </p> </div> </div> </div> </footer> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" xintegrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script> <script> document.addEventListener('DOMContentLoaded', () => { // Lógica del reproductor de radio const audioPlayer = document.getElementById('audio-player'); const playPauseButton = document.getElementById('play-pause-button'); const liveIndicator = document.getElementById('live-indicator'); const liveIcon = document.getElementById('live-icon'); const errorMessage = document.getElementById('error-message'); const radioStreamUrl = 'https://streaming3.locucionar.com/proxy/apostoles991?mp=%2Fstream'; if (audioPlayer.canPlayType('audio/aac') || audioPlayer.canPlayType('audio/aacp')) { audioPlayer.src = radioStreamUrl; audioPlayer.addEventListener('error', (e) => { console.error('Error nativo del reproductor, intentando con HLS.js...', e); initializeHls(); }); } else { initializeHls(); } function initializeHls() { if (Hls.isSupported()) { const hls = new Hls(); hls.attachMedia(audioPlayer); hls.loadSource(radioStreamUrl); hls.on(Hls.Events.MANIFEST_PARSED, function() { playPauseButton.disabled = false; errorMessage.classList.add('d-none'); }); hls.on(Hls.Events.ERROR, function (event, data) { if (data.fatal) { errorMessage.textContent = 'Error: No se pudo cargar el stream.'; errorMessage.classList.remove('d-none'); liveIcon.classList.remove('live-pulse'); console.error('Hls.js error:', data.details, data.url, data.reason); playPauseButton.innerHTML = '<i class="fas fa-play"></i>'; playPauseButton.disabled = false; } }); } else { errorMessage.textContent = 'Navegador no compatible.'; errorMessage.classList.remove('d-none'); liveIcon.classList.remove('live-pulse'); playPauseButton.disabled = true; } } let isPlaying = false; playPauseButton.addEventListener('click', () => { if (isPlaying) { audioPlayer.pause(); } else { audioPlayer.play().catch(error => { console.error('Error al intentar reproducir:', error); errorMessage.textContent = 'Error: se requiere interacción del usuario.'; errorMessage.classList.add('d-none'); }); } }); audioPlayer.addEventListener('playing', () => { playPauseButton.innerHTML = '<i class="fas fa-pause"></i>'; liveIcon.classList.add('live-pulse'); errorMessage.classList.add('d-none'); isPlaying = true; }); audioPlayer.addEventListener('pause', () => { playPauseButton.innerHTML = '<i class="fas fa-play"></i>'; liveIcon.classList.remove('live-pulse'); isPlaying = false; }); audioPlayer.addEventListener('waiting', () => { liveIcon.classList.remove('live-pulse'); }); // --- Lógica de Notificaciones Push (corregida) --- const notificationPrompt = document.getElementById('notification-prompt'); const subscribeButton = document.getElementById('subscribe-button'); const dismissButton = document.getElementById('dismiss-button'); const VAPID_PUBLIC_KEY = 'BMYVxtBBzcRDLmkycVWZe2fINnxfUvt7-pf2EPkjpH2EvIpPcY9hnyNWQfU3IcL_QEC4VZDaoMdg-UxLgw_7QpU'; const DISMISS_FLAG = 'notification_dismissed'; // Nueva función para convertir la clave Base64 a Uint8Array function urlBase64ToUint8Array(base64String) { const padding = '='.repeat((4 - base64String.length % 4) % 4); const base64 = (base64String + padding) .replace(/\-/g, '+') .replace(/_/g, '/'); const rawData = window.atob(base64); const outputArray = new Uint8Array(rawData.length); for (let i = 0; i < rawData.length; ++i) { outputArray[i] = rawData.charCodeAt(i); } return outputArray; } async function setupPushNotifications() { if (!('serviceWorker' in navigator && 'PushManager' in window)) { console.warn('Este navegador no soporta notificaciones push.'); notificationPrompt.classList.add('hidden'); return; } if (localStorage.getItem(DISMISS_FLAG) === 'true') { console.log('Notificaciones ya descartadas o concedidas. Ocultando banner.'); notificationPrompt.classList.add('hidden'); return; } try { const registration = await navigator.serviceWorker.register('/service-worker.js'); console.log('Service Worker registrado con éxito:', registration); const permissionStatus = Notification.permission; if (permissionStatus === 'default') { notificationPrompt.classList.remove('hidden'); } else { notificationPrompt.classList.add('hidden'); } subscribeButton.addEventListener('click', async () => { try { const permission = await Notification.requestPermission(); if (permission === 'granted') { // Aquí se convierte la clave VAPID correctamente const applicationServerKey = urlBase64ToUint8Array(VAPID_PUBLIC_KEY); if (!applicationServerKey) { console.error("No se pudo convertir la clave VAPID."); return; } const pushSubscription = await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: applicationServerKey, }); console.log('Objeto de suscripción:', pushSubscription); const response = await fetch('/api/subscribe', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(pushSubscription), }); if (!response.ok) { throw new Error(`Error en el servidor: ${response.status} ${response.statusText}`); } // Animación de éxito notificationPrompt.innerHTML = '<div class="notification-success-animation"><i class="fas fa-check"></i></div>'; setTimeout(() => { notificationPrompt.classList.add('hidden'); localStorage.setItem(DISMISS_FLAG, 'true'); }, 1000); console.log('Suscripción a notificaciones exitosa.'); } else { console.log('Permiso de notificaciones denegado. Ocultando banner.'); notificationPrompt.classList.add('hidden'); localStorage.setItem(DISMISS_FLAG, 'true'); } } catch (error) { console.error('Error al suscribir al usuario:', error); notificationPrompt.classList.add('hidden'); localStorage.setItem(DISMISS_FLAG, 'true'); } }); dismissButton.addEventListener('click', () => { notificationPrompt.classList.add('hidden'); localStorage.setItem(DISMISS_FLAG, 'true'); console.log('Banner de notificaciones descartado.'); }); } catch (error) { console.error('Error al registrar el Service Worker:', error); notificationPrompt.classList.add('hidden'); } } setupPushNotifications(); }); </script> </body></html>