1<!DOCTYPE html> 2<html lang="pt-BR"> 3 <head> 4 <meta charset="UTF-8" /> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 <title>Rádio Reggae Jah</title> 7 <meta 8 name="description" 9 content="Rádio Reggae Jah: reggae roots, dub e cultura com programação contÃnua, notÃcias, equipe e comunidade conectada." 10 /> 11 <meta property="og:type" content="website" /> 12 <meta property="og:title" content="Rádio Reggae Jah" /> 13 <meta 14 property="og:description" 15 content="Reggae roots, dub e cultura com programação contÃnua, notÃcias e comunidade conectada." 16 /> 17 <meta property="og:image" content="img/logo.png" /> 18 <meta property="og:url" content="https://www.reggaejah.com/" /> 19 <meta name="twitter:card" content="summary_large_image" /> 20 <meta name="twitter:title" content="Rádio Reggae Jah" /> 21 <meta 22 name="twitter:description" 23 content="Reggae roots, dub e cultura com programação contÃnua, notÃcias e comunidade conectada." 24 /> 25 <meta name="twitter:image" content="img/logo.png" /> 26 <link rel="icon" type="image/png" href="img/logo.png" /> 27 <link rel="preconnect" href="https://fonts.googleapis.com" /> 28 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 29 <link 30 href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" 31 rel="stylesheet" 32 /> 33 <!-- CSS do player --> 34 <link rel="stylesheet" href="Player_topo/css/font-awesome.min.css" /> 35 <link rel="stylesheet" href="Player_topo/css/animate.css" /> 36 <link rel="stylesheet" href="Player_topo/css/style.css" /> 37 <link rel="stylesheet" href="style.css?v=11" /> 38 </head> 39 <body> 40 <!-- Skip Links para Navegação por Teclado --> 41 <a href="#main-content" class="skip-link">Pular para o conteúdo principal</a> 42 <a href="#player" class="skip-link">Pular para o player</a> 43 <a href="#nav" class="skip-link">Pular para o menu de navegação</a> 44 45 <!-- Player topo --> 46 <div class="top-player"> 47 <section id="player" class="player-bar"> 48 <div class="cover-album"> 49 <div id="currentCoverArt"></div> 50 <div class="watermark"></div> 51 </div> 52 <div class="info-current-song"> 53 <h2 id="currentSong" class="current-song text-uppercase">Música</h2> 54 <h3 id="currentArtist" class="current-artist text-captalize">Artista</h3> 55 </div> 56 <div class="live-info-wrapper"> 57 <div class="live-info" id="liveInfo"></div> 58 <div id="playerStatus" class="player-status status-connecting" aria-live="polite">Conectando...</div> 59 <div class="floating-notes" aria-hidden="true"> 60 <span>â«</span> 61 <span>âª</span> 62 <span>â«</span> 63 <span>âª</span> 64 </div> 65 </div> 66 <div class="controls"> 67 <button type="button" class="btn-play" onclick="togglePlay()" aria-label="Tocar ou pausar a rádio"> 68 <i id="playerButton" class="fa fa-play"></i> <span id="buttonPlay">PLAY</span> 69 </button> 70 <button type="button" class="btn-lyrics" onclick="openLyricsModal()" aria-label="Ver letra da música"> 71 <i class="fa fa-music"></i> 72 </button> 73 <button type="button" id="activateAudioButton" class="btn-activate-sound hidden" aria-label="Ativar som da rádio"> 74 <i class="fa fa-volume-up"></i> ATIVAR SOM 75 </button> 76 <div class="volume-control"> 77 <i class="fa fa-volume-up"></i> 78 <input type="range" id="volume" step="1" min="0" max="100" value="70" aria-label="Controle de volume"> 79 <span class="volume-tooltip" id="volumeTooltip">70%</span> 80 </div> 81 </div> 82 <div class="recent-box"> 83 <h4>Próxima Música</h4> 84 <div class="recent-item"> 85 <div class="cover-historic" id="nextCover"></div> 86 <div class="music-info"> 87 <div class="song" id="nextSong">Carregando...</div> 88 <div class="artist" id="nextArtist">-</div> 89 </div> 90 </div> 91 </div> 92 </section> 93 </div> 94 95 <!-- Modal de Letra --> 96 <div id="lyricsModal" class="lyrics-modal hidden"> 97 <div class="lyrics-modal-content"> 98 <div class="lyrics-modal-header"> 99 <h3 id="lyricsTitle">Letra da Música</h3> 100 <button class="btn-close" onclick="closeLyricsModal()" aria-label="Fechar modal"> 101 <i class="fa fa-times"></i> 102 </button> 103 </div> 104 <div class="lyrics-modal-body">
105 <div id="lyricsContent" class="lyrics-content"> 106 <div class="lyrics-loading"> 107 <i class="fa fa-spinner fa-spin"></i> 108 <p>Carregando letra...</p> 109 </div> 110 </div> 111 </div> 112 </div> 113 </div> 114 115 <!-- Menu fixo --> 116 <header class="header" role="banner"> 117 <div class="container nav-container" id="nav"> 118 <div class="brand"> 119 <span class="brand-mark" role="img" aria-label="Rádio Reggae Jah">RRJ</span> 120 <span class="brand-name">Rádio Reggae Jah</span> 121 </div> 122 <nav class="nav" role="navigation" aria-label="Menu principal"> 123 <a href="#inicial">INICIAL</a> 124 <a href="#programacao">PROGRAMAÃÃO</a> 125 <a href="#equipe">EQUIPE</a> 126 <a href="noticias.html">NOTÃCIAS</a> 127 <a href="#sobre">SOBRE NÃS</a> 128 </nav> 129 <div class="header-actions"> 130 <a 131 class="header-app-btn" 132 href="https://www.reggaejah.com/radio-reggae-jah/index.html" 133 target="_blank" 134 rel="noopener" 135 aria-label="Baixe nosso APP" 136 > 137 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 138 <path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path> 139 <polyline points="7 10 12 15 17 10"></polyline> 140 <line x1="12" y1="15" x2="12" y2="3"></line> 141 </svg> 142 <span>Baixe nosso APP</span> 143 </a> 144 <button class="theme-toggle" id="themeToggle" aria-label="Alternar tema claro/escuro"> 145 <svg class="sun-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 146 <circle cx="12" cy="12" r="5"></circle> 147 <line x1="12" y1="1" x2="12" y2="3"></line> 148 <line x1="12" y1="21" x2="12" y2="23"></line> 149 <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line> 150 <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line> 151 <line x1="1" y1="12" x2="3" y2="12"></line> 152 <line x1="21" y1="12" x2="23" y2="12"></line> 153 <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line> 154 <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line> 155 </svg> 156 <svg class="moon-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 157 <path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path> 158 </svg> 159 </button> 160 <button class="menu-toggle" aria-label="Abrir menu"> 161 <span></span><span></span><span></span> 162 </button> 163 </div> 164 </div> 165 </header> 166 167 <main id="main-content" role="main"> 168 <!-- Página inicial --> 169 <section id="inicial" class="hero" aria-labelledby="hero-title"> 170 <div class="slider" id="slider"> 171 <!-- Slides carregados via API --> 172 </div> 173 </section> 174 175 <!-- Chat --> 176 <section class="chat" aria-labelledby="chat-title"> 177 <div class="container"> 178 <h2 id="chat-title">Chat ao vivo</h2> 179 <p>Participe da comunidade e compartilhe sua vibe.</p> 180 <div class="chat-stack"> 181 <!-- Código do chat (exatamente como solicitado) --> 182 <iframe 183 class="chat-frame" 184 src="https://minnit.chat/c/ReggaeJah?embed&nickname=" 185 style="border:none; height:500px; max-height:90vh;" 186 data-minnitchatembed="1" 187 ></iframe> 188 <div class="chat-weather"> 189 <div 190 id="ww_0f8eaff82d673" 191 v="1.3" 192 loc="auto" 193 a='{"t":"ticker","lang":"pt","sl_lpl":1,"ids":[],"font":"Arial","sl_ics":"one_a","sl_sot":"celsius","cl_bkg":"image","cl_font":"#FFFFFF","cl_cloud":"#FFFFFF","cl_persp":"#81D4FA","cl_sun":"#FFC107","cl_moon":"#FFC107","cl_thund":"#FF5722"}' 194 > 195 Mais previsões: 196 <a 197 href="https://tempolongo.com/lisboa_tempo_25_dias/" 198 id="ww_0f8eaff82d673_u" 199 target="_blank" 200 rel="noopener" 201 > 202 Lisboa tempo por hora 203 </a> 204 </div> 205 </div> 206 </div> 207
207<script async src="https://app3.weatherwidget.org/js/?id=ww_0f8eaff82d673"></script>
207 208 </div> 209 </section> 210 211 <!-- Programação --> 212 <section id="programacao" class="section" aria-labelledby="programacao-title"> 213 <div class="container"> 214 <h2 id="programacao-title">Programação</h2> 215 <p class="section-subtitle"> 216 Seleção de programas com energia positiva durante toda a semana. 217 </p> 218 <div class="schedule-wrapper"> 219 <div class="schedule-tabs" id="scheduleTabs"></div> 220 <div class="schedule-table"> 221 <div class="schedule-header"> 222 <span>Horário</span> 223 <span>Programa</span> 224 <span>Apresentador</span> 225 </div> 226 <div class="schedule-rows" id="scheduleRows"></div> 227 </div> 228 </div> 229 </div> 230 </section> 231 232 <!-- Equipe --> 233 <section id="equipe" class="section alt" aria-labelledby="equipe-title"> 234 <div class="container"> 235 <h2 id="equipe-title">Equipe</h2> 236 <p class="section-subtitle"> 237 Profissionais apaixonados por música e cultura. 238 </p> 239 <div class="team-carousel" id="teamCarousel"> 240 <div class="team-track" id="teamTrack"></div> 241 </div> 242 </div> 243 </section> 244 245 <!-- NotÃcias --> 246 <section id="noticias" class="section alt" aria-labelledby="noticias-title"> 247 <div class="container"> 248 <h2 id="noticias-title">NotÃcias</h2> 249 <p class="section-subtitle"> 250 Atualizações sobre lançamentos, eventos e entrevistas. 251 </p> 252 <div class="news-grid" id="newsGrid"></div> 253 </div> 254 </section> 255 256 257 <!-- Sobre nós --> 258 <section id="sobre" class="section" aria-labelledby="sobre-title"> 259 <div class="container about"> 260 <div> 261 <h2 id="sobre-title">Sobre nós</h2> 262 <p> 263 A Rádio Reggae Jah é uma plataforma digital dedicada à difusão da 264 música reggae e à valorização de sua cultura, princÃpios e mensagens. 265 Com foco na promoção da paz, da consciência social e da liberdade, 266 a rádio atua como um canal de conexão entre ouvintes, artistas e 267 movimentos ligados ao reggae no Brasil e no mundo. 268 </p> 269 <p> 270 Fundada em 2020 pelos amigos e entusiastas da música e da cultura 271 reggae Fabio Capixaba, Silnovan e Fabio Koala, a Rádio Reggae Jah 272 nasceu com o propósito de fortalecer a cena independente e ampliar 273 o alcance das expressões culturais oriundas das ilhas, da diáspora 274 africana e do reggae brasileiro. 275 </p> 276 <p> 277 Por meio de uma programação musical criteriosa, conteúdos informativos 278 e iniciativas de interação ao vivo, a Rádio Reggae Jah trabalha 279 continuamente para fomentar a comunidade reggae, promover novos 280 talentos e contribuir para a preservação e expansão desse importante 281 movimento cultural. 282 </p> 283 </div> 284 <div class="values"> 285 <div class="value-card"> 286 <h3>Missão</h3> 287 <p> 288 Ser um canal de referência do reggae contemporâneo, promovendo 289 artistas, difundindo informação de qualidade e transmitindo 290 mensagens de positividade, consciência e transformação social. 291 </p> 292 </div> 293 <div class="value-card"> 294 <h3>Visão</h3> 295 <p> 296 Inspirar pessoas por meio da música reggae e consolidar uma 297 comunidade global de ouvintes engajada, diversa e conectada pelos 298 valores da cultura reggae. 299 </p> 300 </div> 301 <div class="value-card"> 302 <h3>Valores</h3> 303 <ul> 304 <li>Respeito à s pessoas, à s culturas e à s diferenças</li> 305 <li>Valorização da diversidade cultural e artÃstica</li> 306 <li>Espiritualidade como base de consciência e equilÃbrio</li> 307 <li>Responsabilidade social e compromisso com a comunidade</li> 308 <li>Paixão, autenticidade e dedicação à cultura reggae</li> 309 </ul> 310 </div> 311 </div> 312 </div> 313 </section> 314 <section id="contato" class="section alt" aria-labelledby="contato-title"> 315 <div class="container"> 316 <h2 id="contato-title">Contato</h2> 317 <div class="contact-card"> 318 <div class="contact-column"> 319 <p class="contact-email"> 320 Email: 321 <a href="mailto:[email protected]">[email protected]</a> 322 </p> 323 </div> 324 <div class="contact-column contact-icons"> 325 <a 326 class="contact-link" 327 href="https://www.instagram.com/reggaejah2" 328 target="_blank" 329 rel="noopener" 330 aria-label="Instagram Rádio Reggae Jah" 331 > 332 <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"> 333 <path 334 fill="#E1306C" 335 d="M12 7.1A4.9 4.9 0 1 0 12 17a4.9 4.9 0 0 0 0-9.9Zm0 8A3.1 3.1 0 1 1 12 8a3.1 3.1 0 0 1 0 7.1Zm6.2-9.1a1.2 1.2 0 1 1-2.4 0 1.2 1.2 0 0 1 2.4 0Z" 336 /> 337 <path 338 fill="#F77737" 339 d="M16.9 2H7.1A5.1 5.1 0 0 0 2 7.1v9.8A5.1 5.1 0 0 0 7.1 22h9.8a5.1 5.1 0 0 0 5.1-5.1V7.1A5.1 5.1 0 0 0 16.9 2Zm3.3 14.9a3.3 3.3 0 0 1-3.3 3.3H7.1a3.3 3.3 0 0 1-3.3-3.3V7.1a3.3 3.3 0 0 1 3.3-3.3h9.8a3.3 3.3 0 0 1 3.3 3.3Z" 340 /> 341 </svg> 342 </a> 343 <a 344 class="contact-link" 345 href="https://chat.whatsapp.com/L9Fips6CS801WguOwRG4M2" 346 target="_blank" 347 rel="noopener" 348 aria-label="Grupo de ouvintes no WhatsApp" 349 > 350 <svg viewBox="0 0 24 24" aria-hidden="true" focusable="false"> 351 <path 352 fill="#25D366" 353 d="M12.04 2C6.58 2 2.11 6.47 2.11 11.93c0 1.94.55 3.83 1.6 5.46L2 22l4.78-1.56a9.9 9.9 0 0 0 5.26 1.51h.01c5.46 0 9.93-4.47 9.93-9.93A9.94 9.94 0 0 0 12.04 2Zm0 18.08h-.01a8.1 8.1 0 0 1-4.13-1.12l-.3-.18-2.84.93.94-2.77-.2-.29a8.1 8.1 0 1 1 6.54 3.43Zm4.45-6.1c-.24-.12-1.42-.7-1.
35364-.78-.22-.08-.39-.12-.55.12-.16.24-.63.78-.77.94-.14.16-.29.18-.53.06-.24-.12-1.02-.37-1.94-1.18-.71-.63-1.19-1.4-1.33-1.64-.14-.24-.02-.37.1-.49.11-.11.24-.29.36-.43.12-.14.16-.24.24-.39.08-.16.04-.29-.02-.41-.06-.12-.55-1.32-.75-1.81-.2-.48-.41-.41-.55-.42h-.47c-.16 0-.41.06-.63.29-.22.24-.82.8-.82 1.95 0 1.15.84 2.26.96 2.42.12.16 1.65 2.52 4 3.53.56.24 1 .38 1.34.49.56.18 1.07.16 1.47.1.45-.07 1.42-.58 1.62-1.14.2-.56.2-1.04.14-1.14-.06-.1-.22-.16-.47-.28Z" 354 /> 355 </svg> 356 </a> 357 </div> 358 </div> 359 </div> 360 </section> 361 </main> 362 363 <footer class="footer" role="contentinfo"> 364 <div class="container"> 365 <p>© 2026 Rádio Reggae Jah. Todos os direitos reservados.</p> 366 <div class="footer-links"> 367 <a class="footer-admin-link" href="adm.html" target="_blank" rel="noopener" aria-label="Painel administrativo"> 368 <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 369 <path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path> 370 <path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path> 371 </svg> 372 </a> 373 </div> 374 </div> 375 </footer> 376 377 <!-- Widget de Pedidos de Música --> 378 <button id="btn-pedido"><span class="icon">ðµ</span> PEDIR MÃSICA</button> 379 380 <!-- Overlay e Modal --> 381 <div id="iframe-overlay"></div> 382 <div id="iframe-modal" role="dialog" aria-modal="true"> 383 <div class="modal-header" id="modal-drag"> 384 <h3 id="modal-title">ð¦ Pedido Musical</h3> 385 <button id="iframe-close">×</button> 386 </div> 387 <div class="form-container"> 388 <form id="pedidoForm"> 389 <input type="text" name="nome" placeholder="ð¤ Seu nome" required> 390 <input type="text" name="cidade" placeholder="ð Cidade" required> 391 <input type="text" name="musica" placeholder="ð¶ Nome da música" required> 392 <textarea name="mensagem" placeholder="ð Mensagem extra (opcional)"></textarea> 393 <button type="submit">âï¸ ENVIAR PEDIDO</button> 394 </form> 395 </div> 396 </div> 397 398
398<script src="https://cdn.jsdelivr.net/npm/@popperjs/[email protected]/dist/umd/popper.min.js"></script>
398 399
399<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
399 400
400<script src="Player_topo/js/script.js"></script>
400 401
401<script src="script.js?v=10"></script>
401 402 403
403<script> 404 // Modal 405 const btn = document.getElementById('btn-pedido'), 406 modal = document.getElementById('iframe-modal'), 407 overlay = document.getElementById('iframe-overlay'), 408 close = document.getElementById('iframe-close'), 409 dragArea = document.getElementById('modal-drag'), 410 form = document.getElementById('pedidoForm'); 411 btn.onclick = () => { modal.style.display = 'block'; overlay.style.display = 'block'; overlay.classList.add('show'); modal.classList.add('show'); }; 412 const closeModal = () => { modal.classList.remove('show'); overlay.classList.remove('show'); setTimeout(() => { modal.style.display = 'none'; overlay.style.display = 'none'; }, 300); }; 413 close.onclick = overlay.onclick = closeModal; 414 let dragging = false, offX, offY; 415 dragArea.onmousedown = e => { dragging = true; offX = e.clientX - modal.offsetLeft; offY = e.clientY - modal.offsetTop; modal.style.transition = 'none'; }; 416 document.onmousemove = e => { if (dragging) { modal.style.left = e.clientX - offX + 'px'; modal.style.top = e.clientY - offY + 'px'; modal.style.transform = 'none'; } }; 417 document.onmouseup = () => dragging = false; 418 419 // Verificar status do DJ ao vivo 420 let djAoVivo = false; 421 422 function verificarStatusDJ() { 423 fetch('pedido/api/check_live.php') 424 .then(res => res.json()) 425 .then(data => { 426 if (data.status === 'sucesso') { 427 const novoStatus = data.ao_vivo; 428 429 // Se mudou o status 430 if (novoStatus !== djAoVivo) { 431 djAoVivo = novoStatus; 432 433 if (djAoVivo) { 434 // DJ entrou ao vivo - mostrar botão 435 btn.style.display = 'flex'; 436 btn.innerHTML = '<span class="icon">ðµ</span> PEDIR MÃSICA<br>' + data.dj_nome; 437 btn.style.background = 'linear-gradient(135deg, #e74c3c, #c0392b)'; 438 } else { 439 // DJ saiu do ar - esconder botão 440 btn.style.display = 'none'; 441 } 442 } 443 } 444 }) 445 .catch(err => { 446 console.error('Erro ao verificar status:', err); 447 }); 448 } 449 450 // Verificar status inicial e a cada 15 segundos 451 verificarStatusDJ(); 452 setInterval(verificarStatusDJ, 15000); 453 454 // Envio via AJAX para backend PHP 455 form.onsubmit = e => { 456 e.preventDefault(); 457 const formData = new FormData(form); 458
459 fetch('pedido/api/save_pedido.php', { 460 method: 'POST', 461 body: formData 462 }) 463 .then(res => res.json()) 464 .then(data => { 465 if (data.status === 'sucesso') { 466 alert('â Pedido enviado!'); 467 form.reset(); 468 closeModal(); 469 } else { 470 alert('â Erro: ' + data.mensagem); 471 } 472 }) 473 .catch(err => { 474 alert('â Erro ao enviar pedido'); 475 }); 476 }; 477 </script>
477 478 </body> 479</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.