<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Biblioteca Digital — Pr. Ivanildo & Pra. Rose</title>
<!-- Google Fonts & FontAwesome Icons -->
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
:root {
--bg-principal: #0a0b0d;
--bg-card: rgba(22, 24, 28, 0.75);
--bg-sidebar: #111317;
--accent-gold: #d4af37;
--accent-gold-glow: rgba(212, 175, 55, 0.3);
--text-primary: #ffffff;
--text-secondary: #a0a5b1;
--border-color: rgba(255, 255, 255, 0.08);
--glass-blur: blur(12px);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Inter', sans-serif;
-webkit-font-smoothing: antialiased;
}
body {
background-color: var(--bg-principal);
color: var(--text-primary);
display: flex;
height: 100vh;
overflow: hidden;
}
/* BARRA LATERAL (ANOS E MESES) */
aside {
width: 280px;
background-color: var(--bg-sidebar);
border-right: 1px solid var(--border-color);
display: flex;
flex-direction: column;
padding: 24px;
overflow-y: auto;
}
.brand {
margin-bottom: 32px;
text-align: center;
}
.brand i {
font-size: 2rem;
color: var(--accent-gold);
margin-bottom: 8px;
display: inline-block;
filter: drop-shadow(0 0 8px var(--accent-gold-glow));
}
.brand h2 {
font-size: 1.1rem;
font-weight: 700;
letter-spacing: 0.5px;
}
.brand p {
font-size: 0.75rem;
color: var(--text-secondary);
margin-top: 4px;
}
.section-title {
font-size: 0.8rem;
text-transform: uppercase;
letter-spacing: 1px;
color: var(--accent-gold);
margin-bottom: 12px;
font-weight: 600;
}
.filter-group {
margin-bottom: 24px;
}
.year-select {
width: 100%;
padding: 12px;
background: rgba(255,255,255,0.05);
border: 1px solid var(--border-color);
border-radius: 8px;
color: white;
font-weight: 600;
cursor: pointer;
outline: none;
transition: all 0.3s;
}
.year-select:focus {
border-color: var(--accent-gold);
}
.month-list {
list-style: none;
}
.month-item {
padding: 10px 14px;
border-radius: 8px;
margin-bottom: 4px;
cursor: pointer;
color: var(--text-secondary);
font-size: 0.9rem;
transition: all 0.2s ease;
display: flex;
justify-content: space-between;
align-items: center;
}
.month-item:hover, .month-item.active {
background: rgba(255, 255, 255, 0.05);
color: var(--text-primary);
}
.month-item.active {
border-left: 3px solid var(--accent-gold);
padding-left: 11px;
background: rgba(212, 175, 55, 0.1);
}
.month-counter {
font-size: 0.75rem;
background: rgba(255,255,255,0.1);
padding: 2px 6px;
border-radius: 12px;
}
/* CONTEÚDO PRINCIPAL */
main {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
background: radial-gradient(circle at top right, rgba(212, 175, 55, 0.03), transparent 40%);
}
header {
padding: 24px 40px;
border-bottom: 1px solid var(--border-color);
display: flex;
flex-direction: column;
gap: 20px;
}
.search-container {
position: relative;
width: 100%;
max-width: 600px;
}
.search-container i {
position: absolute;
left: 16px;
top: 50%;
transform: translateY(-50%);
color: var(--text-secondary);
}
.search-input {
width: 100%;
padding: 14px 16px 14px 48px;
background: var(--bg-card);
border: 1px solid var(--border-color);
border-radius: 12px;
color: white;
font-size: 0.95rem;
outline: none;
backdrop-filter: var(--glass-blur);
transition: all 0.3s;
}
.search-input:focus {
border-color: var(--accent-gold);
box-shadow: 0 0 15px var(--accent-gold-glow);
}
/* CHIPS DIAS DA SEMANA */
.week-chips {
display: flex;
gap: 8px;
overflow-x: auto;
padding-bottom: 4px;
}
.chip {
padding: 8px 16px;
background: rgba(255,255,255,0.04);
border: 1px solid var(--border-color);
border-radius: 20px;
font-size: 0.85rem;
cursor: pointer;
white-space: nowrap;
transition: all 0.2s;
}
.chip:hover, .chip.active {
background: var(--accent-gold);
color: #000;
font-weight: 600;
border-color: var(--accent-gold);
}
/* GRID DE REUNIÕES */
.content-area {
flex: 1;
padding: 40px;
overflow-y: auto;
}
.meetings-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 24px;
}
.meeting-card {
background: var(--bg-card);
border: 1px solid var(--border-color);
border-radius: 16px;
padding: 24px;
display: flex;
flex-direction: column;
justify-content: space-between;
backdrop-filter: var(--glass-blur);
transition: transform 0.3s, border-color 0.3s;
position: relative;
overflow: hidden;
}
.meeting-card::before {
content: '';
position: absolute;
top: 0; left: 0; width: 4px; height: 100%;
background: var(--accent-gold);
opacity: 0;
transition: opacity 0.3s;
}
.meeting-card:hover {
transform: translateY(-4px);
border-color: rgba(212, 175, 55, 0.4);
}
.meeting-card:hover::before {
opacity: 1;
}
.meeting-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 16px;
}
.meeting-badge {
background: rgba(212, 175, 55, 0.15);
color: var(--accent-gold);
padding: 4px 10px;
border-radius: 6px;
font-size: 0.75rem;
font-weight: 600;
}
.video-count-badge {
font-size: 0.8rem;
color: var(--text-secondary);
}
.meeting-title {
font-size: 1.15rem;
font-weight: 600;
margin-bottom: 8px;
line-height: 1.4;
}
.meeting-meta {
font-size: 0.85rem;
color: var(--text-secondary);
display: flex;
flex-direction: column;
gap: 4px;
margin-bottom: 20px;
}
.meeting-meta span i {
margin-right: 6px;
width: 14px;
color: var(--accent-gold);
}
.btn-watch {
width: 100%;
padding: 12px;
background: rgba(255,255,255,0.05);
border: 1px solid var(--border-color);
color: white;
border-radius: 8px;
cursor: pointer;
font-weight: 500;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
transition: all 0.2s;
}
.btn-watch:hover {
background: white;
color: black;
}
/* MODAL DO PLAYER PREMIUM */
.modal-overlay {
position: fixed;
top: 0; left: 0; width: 100%; height: 100%;
background: rgba(0,0,0,0.85);
backdrop-filter: blur(16px);
display: none;
justify-content: center;
align-items: center;
z-index: 1000;
padding: 24px;
}
.modal-container {
background: #121418;
border: 1px solid var(--border-color);
width: 100%;
max-width: 1100px;
border-radius: 20px;
overflow: hidden;
display: grid;
grid-template-columns: 1fr 350px;
height: 85vh;
max-height: 700px;
}
.player-main {
padding: 24px;
display: flex;
flex-direction: column;
justify-content: space-between;
background: #000;
}
.video-canvas-sim {
width: 100%;
aspect-ratio: 16/9;
background: #1a1d24;
border-radius: 12px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: var(--text-secondary);
position: relative;
border: 1px solid rgba(255,255,255,0.05);
}
.video-canvas-sim i.play-center {
font-size: 4rem;
color: var(--accent-gold);
cursor: pointer;
transition: transform 0.2s;
}
.video-canvas-sim i.play-center:hover {
transform: scale(1.1);
}
.player-details {
margin-top: 16px;
}
.player-title {
font-size: 1.3rem;
font-weight: 600;
margin-bottom: 8px;
}
.playlist-sidebar {
background: #16181c;
border-left: 1px solid var(--border-color);
display: flex;
flex-direction: column;
overflow: hidden;
}
.playlist-header {
padding: 20px;
border-bottom: 1px solid var(--border-color);
}
.playlist-items {
flex: 1;
overflow-y: auto;
padding: 12px;
}
.playlist-item {
padding: 12px;
border-radius: 8px;
cursor: pointer;
margin-bottom: 8px;
background: rgba(255,255,255,0.02);
border: 1px solid transparent;
transition: all 0.2s;
}
.playlist-item:hover, .playlist-item.active {
background: rgba(212, 175, 55, 0.08);
border-color: rgba(212, 175, 55, 0.2);
}
.playlist-item.active h4 {
color: var(--accent-gold);
}
.playlist-item h4 {
font-size: 0.9rem;
margin-bottom: 4px;
}
.playlist-item span {
font-size: 0.75rem;
color: var(--text-secondary);
}
.close-modal {
position: absolute;
top: 24px; right: 24px;
background: rgba(255,255,255,0.1);
border: none; color: white;
width: 40px; height: 40px; border-radius: 50%;
cursor: pointer; display: flex; align-items: center; justify-content: center;
}
/* VERSÃO CELULAR (RESPONSIVIDADE) */
@media(max-width: 900px) {
body { flex-direction: column; }
aside { width: 100%; height: auto; border-right: none; border-bottom: 1px solid var(--border-color); }
header { padding: 20px; }
.content-area { padding: 20px; }
.modal-container { grid-template-columns: 1fr; height: 95vh; max-height: none; overflow-y: auto; }
.playlist-sidebar { height: 300px; }
}
</style>
</head>
<body>
<!-- BARRA LATERAL DA LINHA DO TEMPO -->
<aside>
<div class="brand">
<i class="fa-solid fa-cross"></i>
<h2>MENSAGENS</h2>
<p>Pr. Ivanildo & Pra. Rose</p>
</div>
<div class="filter-group">
<h3 class="section-title">Histórico</h3>
<select class="year-select" id="yearSelect" onchange="renderizarPlataforma()">
<option value="2026">Ano 2026</option>
<option value="2025">Ano 2025</option>
<option value="2024">Ano 2024</option>
<option value="2023">Ano 2023</option>
</select>
</div>
<div class="filter-group">
<h3 class="section-title">Meses</h3>
<ul class="month-list" id="monthList">
<!-- Injetado via Javascript -->
</ul>
</div>
</aside>
<!-- ÁREA DE EXIBIÇÃO CENTRAL -->
<main>
<header>
<div class="search-container">
<i class="fa-solid fa-magnifying-glass"></i>
<input type="text" class="search-input" id="searchInput" placeholder="Pesquisar por tema, palavra-chave, pregador..." oninput="filtrarPorTexto()">
</div>
<div class="week-chips" id="weekChips">
<!-- Injetado via Javascript -->
</div>
</header>
<div class="content-area">
<div class="meetings-grid" id="meetingsGrid">
<!-- Cards de Reuniões Injetados via Javascript -->
</div>
</div>
</main>
<!-- PLAYER PREMIUM MODAL -->
<div class="modal-overlay" id="playerModal">
<button class="close-modal" onclick="fecharPlayer()"><i class="fa-solid fa-xmark"></i></button>
<div class="modal-container">
<div class="player-main">
<div class="video-canvas-sim">
<i class="fa-solid fa-play play-center"></i>
<p style="margin-top: 12px; font-size: 0.85rem;" id="playerCanalId">ID Conectado: UCHXbUviF6vFCdEjKUydOhXw</p>
</div>
<div class="player-details">
<h3 id="playerMainTitle">Título do Recorte</h3>
<p id="playerMeta" style="font-size: 0.85rem; color: var(--text-secondary); margin-top: 6px;"></p>
</div>
</div>
<div class="playlist-sidebar">
<div class="playlist-header">
<h3 style="font-size: 1rem;"><i class="fa-solid fa-list" style="color: var(--accent-gold); margin-right: 8px;"></i>Partes da Reunião</h3>
</div>
<div class="playlist-items" id="playlistItems">
<!-- Clipes da reunião mãe injetados aqui -->
</div>
</div>
</div>
</div>
<!-- ENGENHARIA DE DADOS E COMPORTAMENTO -->
<script>
// Simulando banco de dados gerado em alta escala
const bancoDeDados = [
{
id: "r1", ano: "2026", mes: "Julho", diaSemana: "Dom", data: "12/07/2026", horario: "19:00", tipo: "Culto de Celebração",
videos: [
{ titulo: "Abertura e Clamor Inicial", categoria: "Oração", pregador: "Pr. Ivanildo" },
{ titulo: "Momento de Clamor da Palavra", categoria: "Tema não informado", pregador: "Pra. Rose" },
{ titulo: "A Importância da Oração que Muda Histórias", categoria: "Palavra Principal", pregador: "Pr. Ivanildo" },
{ titulo: "Testemunho e Encerramento", categoria: "Testemunho", pregador: "Pr. Ivanildo" }
]
},
{
id: "r2", ano: "2026", mes: "Julho", diaSemana: "Qua", data: "08/07/2026", horario: "19:30", tipo: "Culto de Doutrina",
videos: [
{ titulo: "Quarta às 19:30h - 08/07/2026", categoria: "Tema não informado", pregador: "Mídia" },
{ titulo: "Estudo Bíblico Profundo", categoria: "Ensino", pregador: "Pr. Ivanildo" }
]
},
{
id: "r3", ano: "2025", mes: "Dezembro", diaSemana: "Ter", data: "23/12/2025", horario: "20:00", tipo: "Vigília",
videos: [
{ titulo: "Mensagem do Culto — Tema não informado", categoria: "Tema não informado", pregador: "Pra. Rose" }
]
}
];
const mesesDoAno = ["Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"];
const diasSemana = ["Todos", "Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"];
let mesSelecionado = "Julho";
let diaSelecionado = "Todos";
function init() {
renderizarMeses();
renderizarChipsDias();
renderizarPlataforma();
}
function renderizarMeses() {
const list = document.getElementById('monthList');
list.innerHTML = mesesDoAno.map(m => `
<li class="month-item ${m === mesSelecionado ? 'active' : ''}" onclick="selecionarMes('${m}')">
<span>${m}</span>
<span class="month-counter">7 dias</span>
</li>
`).join('');
}
function renderizarChipsDias() {
const container = document.getElementById('weekChips');
container.innerHTML = diasSemana.map(d => `
<div class="chip ${d === diaSelecionado ? 'active' : ''}" onclick="selecionarDia('${d}')">${d}</div>
`).join('');
}
function selecionarMes(mes) { mesSelecionado = mes; renderizarMeses(); renderizarPlataforma(); }
function selecionarDia(dia) { diaSelecionado = dia; renderizarChipsDias(); renderizarPlataforma(); }
function renderizarPlataforma() {
const anoAtivo = document.getElementById('yearSelect').value;
const grid = document.getElementById('meetingsGrid');
let filtrados = bancoDeDados.filter(r => r.ano === anoAtivo && r.mes === mesSelecionado);
if (diaSelecionado !== "Todos") filtrados = filtrados.filter(r => r.diaSemana === diaSelecionado);
if(filtrados.length === 0) {
grid.innerHTML = `<p style="color: var(--text-secondary); grid-column: 1/-1; text-align: center; padding: 40px;">Nenhuma reunião registrada para este período.</p>`;
return;
}
grid.innerHTML = filtrados.map(r => `
<div class="meeting-card">
<div>
<div class="meeting-header">
<span class="meeting-badge">${r.tipo}</span>
<span class="video-count-badge"><i class="fa-solid fa-layer-group"></i> ${r.videos.length} vídeos</span>
</div>
<h4 class="meeting-title">${r.diaSemana} às ${r.horario} - ${r.data}</h4>
<div class="meeting-meta">
<span><i class="fa-solid fa-calendar"></i> ${r.data}</span>
<span><i class="fa-solid fa-clock"></
.gif)













.gif)











.gif)









