A Delegacia Geral de Homicídios da Polícia Civil investigará o caso
O post Homem é encontrado morto enrolado em colchão no São Vicente apareceu primeiro em Roraima em Tempo.
A Delegacia Geral de Homicídios da Polícia Civil investigará o caso
O post Homem é encontrado morto enrolado em colchão no São Vicente apareceu primeiro em Roraima em Tempo.
/* ============================================
PLAYER 93FM — barra inferior amarela
============================================ */
.player-93fm {
display: inline-flex;
align-items: center;
gap: 14px;
padding: 8px 18px 8px 8px;
background: rgba(0, 0, 0, 0.08);
border-radius: 999px;
backdrop-filter: blur(4px);
transition: background 0.25s ease;
}
.player-93fm:hover {
background: rgba(0, 0, 0, 0.15);
}
/* Botão circular com gradiente do logo 93FM */
.player-93fm__btn {
width: 48px;
height: 48px;
border-radius: 50%;
border: none;
cursor: pointer;
background: radial-gradient(
circle at 30% 30%,
#ffb627 0%,
#f77f00 50%,
#d62828 100%
);
color: #fff;
display: inline-flex;
align-items: center;
justify-content: center;
box-shadow:
0 4px 12px rgba(214, 40, 40, 0.35),
inset 0 -3px 0 rgba(0, 0, 0, 0.12);
transition:
transform 0.15s ease,
box-shadow 0.2s ease;
flex-shrink: 0;
}
.player-93fm__btn:hover:not(:disabled) {
transform: scale(1.06);
box-shadow:
0 6px 16px rgba(214, 40, 40, 0.5),
inset 0 -3px 0 rgba(0, 0, 0, 0.12);
}
.player-93fm__btn:active {
transform: scale(0.96);
}
.player-93fm__btn:disabled {
cursor: wait;
opacity: 0.85;
}
/* Ícones — só um visível por vez */
.player-93fm__icon {
position: relative;
width: 22px;
height: 22px;
display: inline-flex;
align-items: center;
justify-content: center;
}
.player-93fm__icon svg {
position: absolute;
opacity: 0;
transition: opacity 0.2s ease;
}
.player-93fm[data-state="paused"] .icon-play {
opacity: 1;
}
.player-93fm[data-state="playing"] .icon-pause {
opacity: 1;
}
.player-93fm[data-state="loading"] .icon-loading {
opacity: 1;
animation: spin-93 0.9s linear infinite;
}
@keyframes spin-93 {
to {
transform: rotate(360deg);
}
}
/* Info ao lado do botão */
.player-93fm__info {
display: flex;
flex-direction: column;
line-height: 1.15;
color: #1a1a1a;
}
.player-93fm__label {
display: inline-flex;
align-items: center;
gap: 6px;
font-size: 11px;
font-weight: 800;
letter-spacing: 1.2px;
text-transform: uppercase;
color: #d62828;
}
.player-93fm__title {
font-size: 13px;
font-weight: 600;
color: #2a2a2a;
}
/* Bolinha pulsante "ao vivo" */
.player-93fm__live-dot {
width: 8px;
height: 8px;
border-radius: 50%;
background: #d62828;
box-shadow: 0 0 0 0 rgba(214, 40, 40, 0.7);
animation: pulse-live 1.6s ease-out infinite;
}
@keyframes pulse-live {
0% {
box-shadow: 0 0 0 0 rgba(214, 40, 40, 0.7);
}
70% {
box-shadow: 0 0 0 10px rgba(214, 40, 40, 0);
}
100% {
box-shadow: 0 0 0 0 rgba(214, 40, 40, 0);
}
}
/* Animação suave da bolinha enquanto tocando (mais intensa) */
.player-93fm[data-state="playing"] .player-93fm__live-dot {
animation-duration: 1s;
}
/* ============================================
Botão AO VIVO do topo — sincronizado
============================================ */
.btn-aovivo-menu[data-state="playing"] {
/* opcional: deixa o botão do topo destacado quando tocando */
box-shadow: 0 0 0 3px rgba(214, 40, 40, 0.25);
}
/* Responsivo: esconde o texto em telas pequenas */
@media (max-width: 540px) {
.player-93fm__info {
display: none;
}
.player-93fm {
padding: 4px;
}
}
jQuery(document).ready(function ($) {
const STREAM_URL = 'https://sc4.dnip.com.br:7006/stream';
const audio = document.getElementById('radio93fm');
const $player = $('#player93fm');
// Seletor único: pega TODOS os botões com a classe .btn-aovivo-menu
// (topo, player da barra inferior, e qualquer outro que você adicionar no futuro)
const TRIGGER_SELECTOR = '.btn-aovivo-menu';
let isPlaying = false;
let isLoading = false;
function getTriggers() {
// Refaz a busca a cada chamada para pegar botões adicionados dinamicamente
return $(TRIGGER_SELECTOR);
}
function setState(state) {
const $triggers = getTriggers();
$player.attr('data-state', state);
$triggers.attr('data-state', state);
// Atualiza só os botões que tenham .trigger-text (ex: o do topo)
$triggers.each(function () {
const $text = $(this).find('.trigger-text');
if (!$text.length) return;
switch (state) {
case 'loading': $text.text('CARREGANDO...'); break;
case 'playing': $text.text('PAUSAR'); break;
case 'error': $text.text('ERRO'); break;
default: $text.text('AO VIVO');
}
});
$triggers.prop('disabled', state === 'loading');
}
function play() {
if (isLoading || isPlaying) return;
isLoading = true;
setState('loading');
audio.src = STREAM_URL + '?t=' + Date.now();
audio.load();
const p = audio.play();
if (p !== undefined) {
p.then(() => {
isPlaying = true;
isLoading = false;
setState('playing');
}).catch((err) => {
console.error('Erro ao reproduzir 93FM:', err);
isPlaying = false;
isLoading = false;
setState('error');
setTimeout(() => setState('paused'), 3000);
});
}
}
function pause() {
audio.pause();
audio.removeAttribute('src');
audio.load();
isPlaying = false;
setState('paused');
}
function toggle() {
if (isPlaying) pause();
else play();
}
// Estado inicial
setState('paused');
// Delegação de eventos no document — pega qualquer .btn-aovivo-menu,
// inclusive os que forem inseridos depois (menus dinâmicos, ajax, etc.)
$(document).on('click', TRIGGER_SELECTOR, function (e) {
e.preventDefault();
toggle();
});
// Sincronização com eventos nativos do
audio.addEventListener('pause', () => {
if (!isLoading) {
isPlaying = false;
setState('paused');
}
});
audio.addEventListener('error', () => {
isPlaying = false;
isLoading = false;
setState('error');
setTimeout(() => setState('paused'), 3000);
});
});

Sertanejo Bom D+
com Sunayra Cabral