oposiciones

This commit is contained in:
Tatiana Villa 2026-04-24 14:14:13 +02:00
commit a1f4d17c93
76 changed files with 3260 additions and 126 deletions

2
.dockerignore Normal file
View File

@ -0,0 +1,2 @@
.git
Dockerfile

View File

@ -142,6 +142,53 @@ body {
margin-bottom: 1rem;
}
.game-btn {
font-size: 2.5rem;
padding: 10px;
border: var(--borde); /* Usamos tu variable de borde */
border-radius: 50%;
background: var(--color-secundario);
color: var(--color-texto);
cursor: pointer;
transition: transform var(--transicion), background var(--transicion), box-shadow var(--transicion);
width: 80px;
height: 80px;
display: flex;
align-items: center;
justify-content: center;
margin: 0.3rem;
}
.game-btn:hover {
transform: scale(1.15);
box-shadow: 0 0 10px var(--color-acento);
background: var(--color-fondo);
}
/* Clase que añade el JS al hacer click */
.game-btn.seleccionada {
box-shadow: 0 0 20px var(--color-acento);
transform: scale(1.2);
border-color: var(--color-acento);
}
.game-btn-pc {
font-size: 2.5rem;
opacity: 0.3;
width: 80px;
height: 80px;
display: flex;
align-items: center;
justify-content: center;
transition: opacity 0.3s ease, transform 0.3s ease;
}
/* Clase para resaltar la elección del PC */
.pc-elegido {
opacity: 1;
transform: scale(1.2);
}
/* Imágenes */
.btn-img {
width: 70px;
@ -175,6 +222,95 @@ body {
margin-top: 1rem;
}
/* ── Mapa SVG interactivo ─────────────────────────────────── */
.mapa-svg {
width: 90%;
max-width: 320px;
margin-top: 1rem;
overflow: visible;
}
/* Líneas de conexión */
.conexion {
stroke: var(--color-primario);
stroke-width: 1.5;
opacity: 0.3;
transition: stroke 0.25s, stroke-width 0.25s, opacity 0.25s;
}
/* Nodos: círculo base */
.nodo circle {
fill: var(--color-secundario);
stroke: var(--color-primario);
stroke-width: 2;
transition: fill 0.25s, stroke 0.25s, filter 0.25s, opacity 0.25s;
}
.nodo-emoji {
font-size: 20px;
pointer-events: none;
user-select: none;
}
.nodo-label {
font-size: 10px;
fill: var(--color-texto);
font-family: var(--fuente-base);
pointer-events: none;
transition: opacity 0.25s, fill 0.25s;
}
/* ── Estados al pasar el ratón sobre un botón ─────────────── */
/* Atenúa todas las conexiones cuando el mapa está activo */
.mapa-activo .conexion {
opacity: 0.1;
}
/* Resalta las conexiones activas (las del botón en hover) */
.mapa-activo .conexion.conexion-activa {
stroke: var(--color-acento);
stroke-width: 2.5;
opacity: 1;
}
/* Nodo origen (la opción sobre la que se hace hover) */
.nodo.nodo-origen circle {
stroke: var(--color-acento);
stroke-width: 3;
}
/* Nodos vencidos: se iluminan en dorado */
.nodo.nodo-vencido circle {
fill: var(--color-acento);
stroke: var(--color-acento);
filter: drop-shadow(0 0 7px var(--color-acento));
}
.nodo.nodo-vencido .nodo-label {
fill: var(--color-acento);
font-weight: 700;
opacity: 1;
}
/* El resto de nodos se atenúa */
.mapa-activo .nodo:not(.nodo-vencido):not(.nodo-origen) circle {
opacity: 0.35;
}
.mapa-activo .nodo:not(.nodo-vencido):not(.nodo-origen) .nodo-label {
opacity: 0.35;
}
/* Texto de pista debajo del mapa */
.mapa-hint-texto {
font-size: 0.8rem;
color: var(--color-acento);
font-weight: 600;
min-height: 1.2rem;
margin-top: 0.4rem;
transition: opacity 0.25s;
}
/* Texto */
.grande {
font-size: 1.2rem;

View File

@ -421,6 +421,7 @@ a:hover { text-decoration: underline; }
color: var(--text-muted);
}
<<<<<<< HEAD
.md-body table { border-collapse: collapse; width: 100%; margin: 1rem 0 1.2rem; font-size: .88rem; }
.md-body th { background: #2d2d2d; color: var(--accent-2); text-align: left; padding: .55rem .8rem; border: 1px solid var(--border); }
.md-body td { padding: .45rem .8rem; border: 1px solid var(--border); }
@ -667,6 +668,18 @@ a:hover { text-decoration: underline; }
margin-left: auto;
margin-right: auto;
padding: 2rem 1.5rem;
=======
#countdown {
font-size: 1.2rem;
color: var(--color-acento);
font-weight: bold;
}
/* Footer */
footer {
border-top: 1px solid var(--color-borde);
color: var(--color-acento);
>>>>>>> 0504d24833e730c5367d475ac407b45970029627
}
.quiz-header { margin-bottom: 2rem; text-align: center; }

View File

@ -12,16 +12,55 @@ function calcularEdad(fechaNacimiento) {
const fechaNacimientoAndrea = "2001-01-14";
const edadAndrea = calcularEdad(fechaNacimientoAndrea);
document.getElementById("edad-andrea").textContent = edadAndrea;
if (document.getElementById("edad-andrea")) document.getElementById("edad-andrea").textContent = edadAndrea;
const fechaNacimientoGemelos = "2004-11-24";
const edadGemelos = calcularEdad(fechaNacimientoGemelos);
document.getElementById("edad-gemelos").textContent = edadGemelos;
if (document.getElementById("edad-gemelos")) document.getElementById("edad-gemelos").textContent = edadGemelos;
const fechaPandemia = "2020-03-11";
const edadPandemia = calcularEdad(fechaPandemia);
document.getElementById("edad-pandemia").textContent = edadPandemia;
if (document.getElementById("edad-pandemia")) document.getElementById("edad-pandemia").textContent = edadPandemia;
// añade el año actual al pie de página
document.getElementById("anio").textContent = new Date().getFullYear();
if (document.getElementById("anio")) document.getElementById("anio").textContent = new Date().getFullYear();
// PROYECTOS
/**
* Script para la cuenta atrás del examen TAI AGE
* Fecha: 23 de mayo de 2026
*/
document.addEventListener('DOMContentLoaded', () => {
// Definimos la fecha objetivo (23 de mayo de 2026 a las 09:00)
const examenDate = new Date("May 23, 2026 09:00:00").getTime();
const countdownContainer = document.getElementById("countdown");
// Si el contenedor no existe en esta página, no ejecutamos el intervalo
if (!countdownContainer) return;
const updateTimer = () => {
const now = new Date().getTime();
const diff = examenDate - now;
if (diff < 0) {
countdownContainer.innerHTML = "¡Día del examen!";
clearInterval(timerInterval);
return;
}
// Cálculos de tiempo
const d = Math.floor(diff / (1000 * 60 * 60 * 24));
const h = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const m = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
const s = Math.floor((diff % (1000 * 60)) / 1000);
// Formateamos el texto
countdownContainer.innerHTML = `Examen en: ${d}d ${h}h ${m}m ${s}s`;
};
// Ejecutamos una vez al cargar y luego cada segundo
updateTimer();
const timerInterval = setInterval(updateTimer, 1000);
});

View File

@ -15,6 +15,12 @@ function inicializarDOM() {
DOM.resultado = document.getElementById("resultado");
DOM.opciones = document.querySelectorAll(".btn-img");
DOM.toggleTema = document.getElementById("toggle-tema");
DOM.eleccionordenador = document.getElementById("eleccionordenador");
DOM.resultado = document.getElementById("resultado");
DOM.opciones = document.querySelectorAll(".game-btn");
DOM.toggleTema = document.getElementById("toggle-tema");
}
function ocultarJuego() {
@ -58,33 +64,112 @@ function reproducirSonido() {
}
function quienGana(opcionJugador) {
const opciones = ["piedra", "papel", "tijera", "lagarto", "spock"];
const opcionOrdenador = opciones[Math.floor(Math.random() * opciones.length)];
// 1. Definir opciones y elección aleatoria del ordenador
const opciones = ["piedra", "papel", "tijera", "lagarto", "spock"];
const opcionOrdenador = opciones[Math.floor(Math.random() * opciones.length)];
DOM.eleccionjugador.textContent = opcionJugador;
DOM.eleccionordenador.textContent = opcionOrdenador;
// Diccionario de emojis para actualizar los textos de pantalla
const emojis = {
piedra: "🪨",
papel: "📄",
tijera: "✂️",
lagarto: "🦎",
spock: "🖖"
};
const ganaJugador =
(opcionJugador === "piedra" && ["tijera", "lagarto"].includes(opcionOrdenador)) ||
(opcionJugador === "papel" && ["piedra", "spock"].includes(opcionOrdenador)) ||
(opcionJugador === "tijera" && ["papel", "lagarto"].includes(opcionOrdenador)) ||
(opcionJugador === "lagarto" && ["papel", "spock"].includes(opcionOrdenador)) ||
(opcionJugador === "spock" && ["piedra", "tijera"].includes(opcionOrdenador));
// 2. Actualizar visualmente la elección en el DOM
DOM.eleccionjugador.textContent = `Elegiste: ${emojis[opcionJugador]}`;
DOM.eleccionordenador.textContent = `PC eligió: ${emojis[opcionOrdenador]}`;
if (opcionJugador === opcionOrdenador) {
DOM.resultado.textContent = "Empate";
animarResultado("empate");
} else if (ganaJugador) {
DOM.resultado.textContent = "Ganaste";
DOM.puntosPersona.textContent = (parseInt(DOM.puntosPersona.textContent) + 1).toString();
animarResultado("victoria");
} else {
DOM.resultado.textContent = "Perdiste";
DOM.puntosOrdenador.textContent = (parseInt(DOM.puntosOrdenador.textContent) + 1).toString();
animarResultado("derrota");
// 3. Resaltar el icono del ordenador (opcional, para dar feedback visual)
document.querySelectorAll('.game-btn-pc').forEach(el => el.classList.remove('pc-elegido'));
const pcIcono = document.getElementById(`pc-${opcionOrdenador}`);
if (pcIcono) {
pcIcono.classList.add('pc-elegido');
}
// 4. Lógica de victoria (Reglas extendidas de Sheldon Cooper)
// El jugador gana si su opción vence a la del ordenador
const ganaJugador =
(opcionJugador === "piedra" && (opcionOrdenador === "tijera" || opcionOrdenador === "lagarto")) ||
(opcionJugador === "papel" && (opcionOrdenador === "piedra" || opcionOrdenador === "spock")) ||
(opcionJugador === "tijera" && (opcionOrdenador === "papel" || opcionOrdenador === "lagarto")) ||
(opcionJugador === "lagarto" && (opcionOrdenador === "papel" || opcionOrdenador === "spock")) ||
(opcionJugador === "spock" && (opcionOrdenador === "piedra" || opcionOrdenador === "tijera"));
// 5. Determinar resultado y actualizar puntuación
if (opcionJugador === opcionOrdenador) {
DOM.resultado.textContent = "¡Empate! 🤝";
animarResultado("empate");
} else if (ganaJugador) {
DOM.resultado.textContent = "¡Has ganado! 🏆";
// Convertimos a número, sumamos 1 y devolvemos a texto
let puntosActuales = parseInt(DOM.puntosPersona.textContent);
DOM.puntosPersona.textContent = (puntosActuales + 1).toString();
animarResultado("victoria");
} else {
DOM.resultado.textContent = "Has perdido 😢";
let puntosPC = parseInt(DOM.puntosOrdenador.textContent);
DOM.puntosOrdenador.textContent = (puntosPC + 1).toString();
animarResultado("derrota");
}
// 6. Efecto de sonido
reproducirSonido();
}
// Reglas: qué opciones vence cada elección
const vence = {
piedra: ["tijera", "lagarto"],
papel: ["piedra", "spock"],
tijera: ["papel", "lagarto"],
lagarto: ["papel", "spock"],
spock: ["piedra", "tijera"]
};
const nombresMapa = {
piedra: "Piedra", papel: "Papel", tijera: "Tijera",
lagarto: "Lagarto", spock: "Spock"
};
function activarMapaHover(choice) {
const mapa = document.getElementById("mapa-juego");
if (!mapa) return;
mapa.classList.add("mapa-activo");
// Marcar nodo origen
const origen = document.getElementById(`nodo-${choice}`);
if (origen) origen.classList.add("nodo-origen");
// Marcar nodos vencidos y conexiones activas
vence[choice].forEach(beaten => {
const nodo = document.getElementById(`nodo-${beaten}`);
if (nodo) nodo.classList.add("nodo-vencido");
});
mapa.querySelectorAll(`.conexion[data-from="${choice}"]`)
.forEach(l => l.classList.add("conexion-activa"));
// Texto de pista
const hint = document.getElementById("mapa-hint");
if (hint) {
const vencidos = vence[choice].map(v => nombresMapa[v]).join(" y ");
hint.textContent = `${nombresMapa[choice]} vence a: ${vencidos}`;
}
}
reproducirSonido();
function desactivarMapaHover() {
const mapa = document.getElementById("mapa-juego");
if (!mapa) return;
mapa.classList.remove("mapa-activo");
mapa.querySelectorAll(".nodo-origen, .nodo-vencido")
.forEach(n => n.classList.remove("nodo-origen", "nodo-vencido"));
mapa.querySelectorAll(".conexion-activa")
.forEach(l => l.classList.remove("conexion-activa"));
const hint = document.getElementById("mapa-hint");
if (hint) hint.textContent = "";
}
function configurarEventos() {
@ -98,6 +183,8 @@ function configurarEventos() {
op.classList.add("seleccionada");
quienGana(op.id);
});
op.addEventListener("mouseenter", () => activarMapaHover(op.dataset.choice));
op.addEventListener("mouseleave", desactivarMapaHover);
});
}

View File

@ -4,7 +4,6 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Piedra · Papel · Tijera · Lagarto · Spock</title>
<script src="js/piedra.js" defer></script>
<link rel="stylesheet" href="css/piedra-papel-tijera.css">
<link rel="icon" href="favicon.ico" type="image/x-icon">
@ -27,7 +26,6 @@
<main class="cuerpo">
<!-- Jugador -->
<section class="columna" id="persona">
<header class="cabecera-jugador">
<p id="etiquetaJugador">Puntuación Jugador:</p>
@ -35,23 +33,79 @@
</header>
<div class="opciones">
<img src="img/piedra-papel-tijera/piedra.png" id="piedra" class="btn-img" alt="Piedra">
<img src="img/piedra-papel-tijera/papel.png" id="papel" class="btn-img" alt="Papel">
<img src="img/piedra-papel-tijera/tijera.png" id="tijera" class="btn-img" alt="Tijera">
<img src="img/piedra-papel-tijera/lagarto.png" id="lagarto" class="btn-img" alt="Lagarto">
<img src="img/piedra-papel-tijera/spock.png" id="spock" class="btn-img" alt="Spock">
<button class="game-btn" id="piedra" data-choice="piedra" title="Piedra">🪨</button>
<button class="game-btn" id="papel" data-choice="papel" title="Papel">📄</button>
<button class="game-btn" id="tijera" data-choice="tijera" title="Tijera">✂️</button>
<button class="game-btn" id="lagarto" data-choice="lagarto" title="Lagarto">🦎</button>
<button class="game-btn" id="spock" data-choice="spock" title="Spock">🖖</button>
</div>
<p class="grande" id="eleccionjugador">¿Qué eliges?</p>
</section>
<!-- Centro -->
<section class="columna" id="imagencentro">
<p class="grande" id="resultado">Resultado</p>
<img src="img/piedra-papel-tijera/esquemaminimalista.png" class="central-img" alt="Esquema del juego">
<!-- Mapa interactivo: pasa el ratón sobre los botones para ver qué vence cada opción -->
<svg id="mapa-juego" class="mapa-svg" viewBox="0 0 350 290" xmlns="http://www.w3.org/2000/svg" aria-label="Mapa de reglas del juego">
<!-- Conexiones (quién vence a quién) -->
<!-- piedra → tijera -->
<line class="conexion" data-from="piedra" data-to="tijera" x1="253" y1="127" x2="133" y2="213"/>
<!-- piedra → lagarto -->
<line class="conexion" data-from="piedra" data-to="lagarto" x1="266" y1="137" x2="246" y2="203"/>
<!-- papel → piedra -->
<line class="conexion" data-from="papel" data-to="piedra" x1="102" y1="112" x2="248" y2="112"/>
<!-- papel → spock -->
<line class="conexion" data-from="papel" data-to="spock" x1="97" y1="97" x2="154" y2="57"/>
<!-- tijera → papel -->
<line class="conexion" data-from="tijera" data-to="papel" x1="104" y1="203" x2="84" y2="137"/>
<!-- tijera → lagarto -->
<line class="conexion" data-from="tijera" data-to="lagarto" x1="138" y1="228" x2="212" y2="228"/>
<!-- lagarto → papel -->
<line class="conexion" data-from="lagarto" data-to="papel" x1="217" y1="213" x2="97" y2="127"/>
<!-- lagarto → spock -->
<line class="conexion" data-from="lagarto" data-to="spock" x1="230" y1="203" x2="183" y2="67"/>
<!-- spock → piedra -->
<line class="conexion" data-from="spock" data-to="piedra" x1="196" y1="57" x2="253" y2="97"/>
<!-- spock → tijera -->
<line class="conexion" data-from="spock" data-to="tijera" x1="167" y1="67" x2="120" y2="203"/>
<!-- Nodos (posiciones en pentágono) -->
<g class="nodo" id="nodo-spock">
<circle cx="175" cy="42" r="26"/>
<text x="175" y="42" text-anchor="middle" dominant-baseline="central" class="nodo-emoji">🖖</text>
<text x="175" y="8" text-anchor="middle" class="nodo-label">Spock</text>
</g>
<g class="nodo" id="nodo-piedra">
<circle cx="274" cy="112" r="26"/>
<text x="274" y="112" text-anchor="middle" dominant-baseline="central" class="nodo-emoji">🪨</text>
<text x="308" y="116" text-anchor="start" class="nodo-label">Piedra</text>
</g>
<g class="nodo" id="nodo-lagarto">
<circle cx="238" cy="228" r="26"/>
<text x="238" y="228" text-anchor="middle" dominant-baseline="central" class="nodo-emoji">🦎</text>
<text x="238" y="272" text-anchor="middle" class="nodo-label">Lagarto</text>
</g>
<g class="nodo" id="nodo-tijera">
<circle cx="112" cy="228" r="26"/>
<text x="112" y="228" text-anchor="middle" dominant-baseline="central" class="nodo-emoji">✂️</text>
<text x="112" y="272" text-anchor="middle" class="nodo-label">Tijera</text>
</g>
<g class="nodo" id="nodo-papel">
<circle cx="76" cy="112" r="26"/>
<text x="76" y="112" text-anchor="middle" dominant-baseline="central" class="nodo-emoji">📄</text>
<text x="42" y="116" text-anchor="end" class="nodo-label">Papel</text>
</g>
</svg>
<p id="mapa-hint" class="mapa-hint-texto"></p>
</section>
<!-- Ordenador -->
<section class="columna" id="ordenador">
<header class="cabecera-jugador">
<p>Puntuación Ordenador:</p>
@ -59,11 +113,11 @@
</header>
<div class="opciones">
<img src="img/piedra-papel-tijera/piedra.png" class="btn-img" alt="Piedra">
<img src="img/piedra-papel-tijera/papel.png" class="btn-img" alt="Papel">
<img src="img/piedra-papel-tijera/tijera.png" class="btn-img" alt="Tijera">
<img src="img/piedra-papel-tijera/lagarto.png" class="btn-img" alt="Lagarto">
<img src="img/piedra-papel-tijera/spock.png" class="btn-img" alt="Spock">
<div class="game-btn-pc" id="pc-piedra">🪨</div>
<div class="game-btn-pc" id="pc-papel">📄</div>
<div class="game-btn-pc" id="pc-tijera">✂️</div>
<div class="game-btn-pc" id="pc-lagarto">🦎</div>
<div class="game-btn-pc" id="pc-spock">🖖</div>
</div>
<p class="grande" id="eleccionordenador">Elección del ordenador</p>
@ -71,11 +125,11 @@
</main>
<footer class="py-5 text-center">
<footer class="py-5 text-center">
<div class="container">
<p class="mb-0">&copy; 2026 - Tatiana Villa</p>
</div>
</footer>
</body>
</html>
</html>

View File

@ -10,65 +10,53 @@
<link rel="icon" href="favicon.ico" type="image/x-icon">
</head>
<body class="bg-black text-light">
<header>
<nav class="navbar navbar-expand-sm navbar-dark bg-dark shadow-sm border-bottom border-secondary">
<div class="container-fluid">
<a class="navbar-brand font-weight-bold" href="index.html" style="font-family: 'Consolas', monospace;">
<span class="text-primary">{</span>tatvil <span class="text-primary">}</span>
</a>
<!-- Header -->
<header>
<nav class="navbar navbar-expand-sm navbar-dark bg-dark shadow-sm border-bottom border-secondary">
<div class="container-fluid">
<!-- Logo -->
<a class="navbar-brand font-weight-bold" href="index.html" style="font-family: 'Consolas', monospace;">
<span class="text-primary">{</span>Aplicaciones de Vanguardia <span class="text-primary">}</span>
</a>
<!-- Botón móvil -->
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#menuNav"
aria-controls="menuNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<!-- Menú -->
<div class="collapse navbar-collapse justify-content-end" id="menuNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="index.html">Inicio</a>
</li>
<li class="nav-item">
<a class="nav-link" href="proyectos.html">Proyectos</a>
</li>
<li class="nav-item">
<a class="nav-link" href="habilidades.html">Habilidades</a>
</li>
<li class="nav-item">
<a class="nav-link" href="formacion.html">Formación</a>
</li>
<!--
<li class="nav-item">
<a class="nav-link" href="experiencia.html">Experiencia</a>
</li>
-->
</ul>
<a class="navbar-toggler" role="button" data-bs-toggle="collapse" data-bs-target="#menuNav"
aria-controls="menuNav" aria-expanded="false" aria-label="Toggle navigation" style="cursor: pointer;">
<span class="navbar-toggler-icon"></span>
</a>
<div class="collapse navbar-collapse justify-content-end" id="menuNav">
<ul class="navbar-nav">
<li class="nav-item"><a class="nav-link" href="index.html">Inicio</a></li>
<li class="nav-item"><a class="nav-link" href="proyectos.html">Proyectos</a></li>
<li class="nav-item"><a class="nav-link" href="habilidades.html">Habilidades</a></li>
<li class="nav-item"><a class="nav-link" href="formacion.html">Formación</a></li>
</ul>
</div>
</div>
</div>
</nav>
</header>
</nav>
</header>
<section id="proyectos" class="py-5">
<div class="container py-5">
<h2 class="section-title mb-5">Proyectos en desarrollo</h2>
<div class="row g-4">
<div class="row g-4"> <div class="col-md-6 col-lg-4">
<div class="card project-card h-100">
<div class="card-body">
<h5 class="card-title fw-bold">Oposiciones</h5>
<p class="card-text text-muted">Temario y cuestionarios para TAI AGE</p>
<div id="countdown" class="mb-2" ></div>
<p class="card-text text-muted card-tecnologia">HTML, CSS, JS</p>
<a href="oposiciones/index.html" class="btn-link">Saber más →</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="card project-card h-100">
<div class="card-body">
<h5 class="card-title fw-bold">Recursos Católicos</h5>
<p class="card-text text-muted">Web de recursos católicos gratuitos (Rosario, oraciones, etc.).</p>
<p class="card-text text-muted card-tecnologia">HTML, CSS, Bootstrap, JavaScript, PHP, SQL, XML, JSON.</p>
<p class="card-text text-muted">Web de recursos católicos gratuitos.</p>
<p class="card-text text-muted card-tecnologia">HTML, CSS, Bootstrap, JS, PHP, SQL.</p>
<a href="https://recursos-catolicos.es" class="btn-link">Saber más →</a>
</div>
</div>
@ -78,8 +66,8 @@
<div class="card project-card h-100">
<div class="card-body">
<h5 class="card-title fw-bold">El Tiempo</h5>
<p class="card-text text-muted">Guardo los datos del tiempo de 3 ciudades españolas que me interesan (Madrid, L'Ampolla (Tarragona), L'Alfas del Pi (Alicante)) con fines estadísticos. </p>
<p class="card-text text-muted card-tecnologia">PHP, MySQL, HTML, CSS, JavaScript.</p>
<p class="card-text text-muted">Estadísticas de Madrid, L'Ampolla y L'Alfas del Pi.</p>
<p class="card-text text-muted card-tecnologia">PHP, MySQL, HTML, CSS, JS.</p>
<a href="eltiempo/index.html" class="btn-link">Saber más →</a>
</div>
</div>
@ -87,54 +75,27 @@
<div class="col-md-6 col-lg-4">
<div class="card project-card h-100">
<div class="card-body">
<h5 class="card-title fw-bold">Formula 1</h5>
<p class="card-text text-muted">Web de estadísticas de Fórmula 1.</p>
<p class="card-text text-muted card-tecnologia">Java, Spring, Hibernate, JPA, MySQL, HTML, CSS, JavaScript.</p>
<p class="card-text text-muted card-tecnologia">Java, Spring, Hibernate, MySQL.</p>
<a href="formula1/index.html" class="btn-link">Saber más →</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="card project-card h-100">
<div class="card-body">
<h5 class="card-title fw-bold">Oposiciones</h5>
<p class="card-text text-muted">Temario y cuestionarios para TAI AGE</p>
<p class="card-text text-muted card-tecnologia">HTML, CSS</p>
<a href="oposiciones/index.html" class="btn-link">Saber más →</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="card project-card h-100">
<div class="card-body">
<h5 class="card-title fw-bold">Piedra, Papel o Tijera</h5>
<p class="card-text text-muted">El famoso juego Piedra, Papel o Tijera.</p>
<p class="card-text text-muted card-tecnologia">HTML, CSS, JavaScript y optimizado para dispositivos móviles.</p>
<p class="card-text text-muted">Juego clásico optimizado para móviles.</p>
<p class="card-text text-muted card-tecnologia">HTML, CSS, JavaScript.</p>
<a href="piedra-papel-tijera.html" class="btn-link">Saber más →</a>
</div>
</div>
</div>
<div class="col-md-6 col-lg-4">
<div class="card project-card h-100">
<div class="card-body">
<h5 class="card-title fw-bold">F1</h5>
<p class="card-text text-muted">Pronosticos, estadisticas, resultados y noticias de Fórmula 1.</p>
<p class="card-text text-muted card-tecnologia">HTML, CSS, JavaScript y optimizado para dispositivos móviles.</p>
<a href="f1.html" class="btn-link">Saber más →</a>
</div>
</div>
</div>
</div>
</div>
</div> </div>
</section>
<footer class="py-5 text-center">
@ -144,5 +105,7 @@
</footer>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
<script src="js/codigo.js"></script>
</body>
</html>

View File

@ -0,0 +1,34 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Biblioteca Cristiana</title>
<link rel="icon" type="image/x-icon" href="img/favicon.png">
<link rel="stylesheet" href="css/estilos.css">
<link rel="stylesheet" href="css/biblioteca.css">
</head>
<body>
<div id="header-container"></div>
<section class="controls">
<input type="text" id="searchInput" placeholder="Buscar por título, autor o tema...">
<select id="categoryFilter">
<option value="all">Todas las categorías</option>
<option value="Biblia">Biblia</option>
<option value="Doctrina">Doctrina</option>
<option value="Oración">Oración</option>
<option value="Santos">Santos</option>
<option value="Espiritualidad">Espiritualidad</option>
<option value="Historia">Historia</option>
</select>
</section>
<section id="booksContainer" class="grid"></section>
<script src="js/header.js"></script>
<script src="js/biblioteca.js"></script>
</body>
</html>

View File

@ -0,0 +1,50 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Biblioteca cristiana</title>
<link rel="icon" type="image/x-icon" href="img/favicon.png">
<link rel="stylesheet" href="css/estilos.css">
<link rel="stylesheet" href="css/biblioteca-cristiana.css">
</head>
<body>
<header class="header-hoy" id="header-hoy">
<h1 class="titulo">RECURSOS CATÓLICOS</h1>
<h2>Biblioteca cristiana</h2>
<div class="fecha">
<span id="fecha-hoy">Martes, 15 de enero de 2026</span>
</div>
<!-- MENU -->
<nav class="menu-principal">
<a href="index.html">Inicio</a>
<a href="rosario.html">Rosario</a>
<a href="oraciones-basicas.html">Oraciones Básicas</a>
<a href="intenciones.html">Intenciones</a>
<a href="biblioteca-cristiana.html">Biblioteca cristiana</a>
</nav>
</header>
<main class="contenedor">
<section class="bloque bloque-fondo" style="background-image: url('img/biblia.jpg');">
<h3>Biblia y evangelio</h3>
<p><a href="https://www.amazon.es/Sagrada-Bibliapopular-geltexbac-EDICIONES-B%C3%8DBLICAS/dp/8422015617/ref=sr_1_6?__mk_es_ES=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;crid=2X17ZIW20JHVF&amp;keywords=biblia&amp;qid=1686516688&amp;sprefix=biblia%2Caps%2C94&amp;sr=8-6">Sagrada Biblia de la conferencia Episcopal Española (CEE)</a></p>
<p><a href="https://www.amazon.es/Catecismo-Doctrina-Cristiana-Ediciones-Populares/dp/8483531496/ref=sr_1_3?crid=1CHRQQCBSKTOY&amp;keywords=catecismo+astete&amp;qid=1686517828&amp;s=books&amp;sprefix=Catecismo+as%2Cstripbooks%2C80&amp;sr=1-3" target="_blank" rel="noreferrer noopener">Catecismo de la doctrina cristiana</a></p>
</section>
<section class="bloque bloque-fondo" style="background-image: url('img/santos.jpg');">
<h3>Vidas de santos</h3>
<p><a href="https://www.amazon.es/d%C3%ADas-Madre-Teresa-Jos%C3%A9-Gonz%C3%A1lez-Balado-ebook/dp/B09SGHLP6R/ref=tmm_kin_swatch_0?_encoding=UTF8&amp;qid=1686518245&amp;sr=1-12">365 días con la madre Teresa de Calcuta</a></p>
<p><a href="https://www.amazon.es/Francisco-Asis-Santos-Amigos-Dios/dp/8484079244/ref=sr_1_1?__mk_es_ES=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;crid=3JXXXQXP05Y9H&amp;keywords=san+francisco+de+asis+luis+perez+simon&amp;qid=1686518697&amp;s=digital-text&amp;sprefix=san+francisco+de+asis+luis+perez+simon%2Cdigital-text%2C77&amp;sr=1-1">San Francisco de Asis (Padre de los Franciscanos)</a> </p>
<p><a href="https://amzn.eu/d/0bv8Tit">Historia de un alma: La doctrina espiritual de Santa Teresita del Niño Jesús (VersiónKindle)</a></p>
</section>
<section class="bloque bloque-fondo" style="background-image: url('img/peliculas.jpg');">
<h3>Películas</h3>
<p><a href="https://www.primevideo.com/detail/0RIG0ODHPZZNTT1XF4Y8I9VM46/ref=dvm_src_ret_es_xx_s">Una monja de cuidado</a> (Sister Act)</p>
<p><a href="#">The chosen</a></p>
</section>
</main>
</body>
</html>

View File

@ -0,0 +1,62 @@
body {
font-family: Arial, sans-serif;
margin: 0;
background: #f7f5f0;
color: #333;
}
.header {
text-align: center;
padding: 2rem;
background: #fff;
border-bottom: 1px solid #ddd;
}
.controls {
display: flex;
gap: 1rem;
padding: 1rem;
justify-content: center;
flex-wrap: wrap;
}
.controls input, .controls select {
padding: 0.7rem;
font-size: 1rem;
border-radius: 6px;
border: 1px solid #ccc;
width: 250px;
}
.grid {
display: grid;
gap: 1.5rem;
padding: 2rem;
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}
.card {
background: #fff;
border-radius: 10px;
padding: 1rem;
box-shadow: 0 2px 6px rgba(0,0,0,0.1);
transition: transform .2s;
}
.card:hover {
transform: translateY(-5px);
}
.card img {
width: 100%;
border-radius: 8px;
}
.card h3 {
margin: 0.5rem 0;
}
.card p {
margin: 0.3rem 0;
font-size: 0.9rem;
}

View File

@ -0,0 +1,391 @@
/* Fuentes importadas corregidas */
@import url('https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400;0,600;1,400&family=Nunito:wght@400;600&display=swap');
:root {
/* Paleta refinada */
--color-primario: #2F3A56; /* Azul noche espiritual */
--color-hover: #24314A; /* Azul noche más oscuro */
--color-secundario: #EAF2FA; /* Azul muy suave */
--color-fondo: #FAF7F2; /* Crema papel antiguo */
--color-texto: #2b2b2b;
--color-acento: #E8A23A; /* Dorado litúrgico */
--blanco-puro: #FFFFFF;
--sombra: rgba(47, 58, 86, 0.15);
}
body {
margin: 0;
font-family: 'Nunito', sans-serif; /* Fuente base moderna */
background-color: var(--color-fondo);
color: var(--color-texto);
line-height: 1.6;
}
/* --- CABECERA --- */
.header-hoy {
color: var(--blanco-puro);
text-align: center;
min-height: 300px; /* ajusta según tu diseño */
padding: 2rem;
background-color: var(--color-primario);
border-bottom: 1px solid #ccc;
transition: background-color 0.8s ease; /* Para que el cambio litúrgico sea suave */
}
.titulo {
font-family: 'EB Garamond', serif;
margin: 0;
font-size: 2.5rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 6px;
text-shadow: 2px 2px 4px rgba(255,255,255,0.3);
}
.fecha {
letter-spacing: 2px;
font-size: 1.2rem;
margin-top: 0.5rem;
font-family: 'EB Garamond', serif;
opacity: 0.9;
}
.ciclo {
letter-spacing: 2px;
margin-top: 0.3rem;
opacity: 0.8;
font-family: 'EB Garamond', serif;
margin: 0;
font-size: 1.2rem;
}
#indicador-liturgico {
margin-top: 1.5rem;
margin-bottom: 2.5rem; /* Añadimos este margen para empujar el contenido hacia abajo */
display: inline-flex;
align-items: center;
gap: 10px;
background: rgba(255,255,255,0.1);
padding: 8px 20px;
border-radius: 50px;
font-weight: 600;
}
/* --- BLOQUE DEL SANTO --- */
.santo {
background: var(--blanco-puro);
margin: 20px auto; /* Cambiamos el negativo por uno positivo para dar aire */
padding: 1.5rem;
border: 2px solid var(--color-acento);
border-radius: 12px;
box-shadow: 0 5px 15px rgba(232, 162, 58, 0.5);
position: relative;
z-index: 10;
max-width: 400px;
}
.santo h2 {
font-family: 'EB Garamond', serif;
margin: 0;
font-size: 1.6rem;
color: var(--color-primario);
}
#descripcion-santo-del-dia {
margin-top: 5px;
font-size: 0.95rem;
font-style: italic;
color: #424242;
}
.santo_discreto {
font-size: 0.9rem;
margin-top: 0.5rem;
font-family: 'EB Garamond', serif;
font-style: italic;
opacity: 0.9;
}
.santo_discreto #descripcion-santo-del-dia {
margin-top: 0px;
font-size: 0.9rem;
font-style: italic;
color: var(--color-secundario);
}
.nombre-difunto {
font-weight: 600;
color: var(--color-primario);
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
}
/* --- MENÚ PRINCIPAL --- */
/*menu de escritorio*/
.menu-principal {
background-color: var(--color-primario);
display: flex;
justify-content: center;
gap: 1rem;
padding: 10px 0;
margin: 0;
}
.menu-principal a {
color: var(--blanco-puro);
text-decoration: none;
font-weight: 600;
font-size: 1rem;
text-transform: uppercase;
letter-spacing: 2px;
transition: color 0.3s ease;
}
/* Botón hamburguesa */
.menu-toggle {
display: none;
font-size: 2rem;
background: none;
border: none;
color: inherit;
cursor: pointer;
}
/* MODO MÓVIL */
@media (max-width: 768px) {
.menu-toggle {
display: block;
margin-left: auto;
margin-right: autoc;
}
.menu-principal {
display: none;
flex-direction: column;
background-color: inherit;
padding: 1rem;
border-top: 1px solid rgba(255,255,255,0.3);
}
.menu-principal.activo {
display: flex;
}
.menu-principal a {
padding: 0.5rem 0;
font-size: 1.2rem;
}
}
/* --- BLOQUES DE CONTENIDO --- */
.bloque {
background-color: var(--blanco-puro);
margin: 2rem auto;
padding: 2rem;
max-width: 600px; /* Para que no se estire demasiado en PC */
border-radius: 15px;
box-shadow: 0 4px 15px var(--sombra);
border: 2px solid var(--color-acento); /* Quitamos el borde oscuro para que sea más elegante */
text-align: center;
}
/* --- AJUSTES PARA BLOQUES CON IMAGEN 4:5 --- */
.bloque-fondo {
/* Quitamos el padding del contenedor para que la capa oscura llegue a los bordes */
padding: 0 !important;
background-size: cover;
background-position: center top;
background-repeat: no-repeat;
position: relative;
color: var(--blanco-puro);
border-radius: 15px;
overflow: hidden;
/* Proporción 4:5 - Ajustamos altura mínima para lucir la imagen */
min-height: 450px;
display: flex;
flex-direction: column;
justify-content: flex-end; /* Texto abajo para no tapar caras/arte arriba */
max-width: 600px;
margin: 2rem auto;
border: 2px solid var(--color-acento);
}
.capa-oscura {
/* Graduado: de negro muy sólido abajo a transparente arriba */
background: linear-gradient(to top,
rgba(0,0,0,0.9) 0%,
rgba(0,0,0,0.4) 50%,
transparent 100%);
padding: 2.5rem 1.5rem 1.5rem 1.5rem;
width: 100%;
box-sizing: border-box;
}
.bloque-fondo h3 {
font-family: 'EB Garamond', serif;
/* Reducido de 5rem a 2.5rem para que sea elegante y no tape la imagen */
font-size: 2.5rem !important;
font-weight: 600;
margin: 0 0 0.5rem 0;
color: var(--blanco-puro);
text-shadow: 2px 2px 8px rgba(0,0,0,0.8);
}
.bloque-fondo p {
font-family: 'Nunito', sans-serif;
font-size: 1.1rem;
margin-bottom: 1.5rem;
text-shadow: 1px 1px 4px rgba(0,0,0,0.8);
}
/* Ajuste del botón sobre fondo de imagen */
.bloque-fondo .boton {
background-color: var(--color-acento); /* Dorado para que resalte más */
color: var(--color-primario);
border: none;
}
.bloque-fondo .boton:hover {
background-color: var(--blanco-puro);
color: var(--color-primario);
}
/* --- SALMO DEL DÍA --- */
.salmo {
font-family: 'EB Garamond', serif;
font-size: 1.6rem;
line-height: 1.4;
font-style: italic;
color: #444;
margin: 0;
}
.bloque ul {
list-style: none;
padding: 0;
margin: 1.5rem 0;
}
.bloque li {
margin-bottom: 12px;
position: relative;
padding-left: 5px;
}
/* --- BOTONES --- */
.boton {
display: inline-block;
background-color: var(--color-primario);
color: white;
padding: 12px 25px;
text-decoration: none;
border-radius: 50px;
font-weight: 600;
text-transform: uppercase;
font-size: 0.8rem;
letter-spacing: 1px;
transition: transform 0.2s, background-color 0.2s;
}
.boton:hover {
transform: translateY(-2px);
background-color: var(--color-hover);
}
/* --- RECURSOS (Enlaces abajo) --- */
.recursos {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 15px;
padding: 2rem;
}
.recursos a {
background: var(--color-secundario);
color: var(--color-primario);
padding: 10px 15px;
border-radius: 8px;
text-decoration: none;
font-size: 0.9rem;
font-weight: 600;
}
/* --- ROSARIO --- */
.contenedor_rosario {
background: #ffffff;
border-radius: 20px;
padding: 2.5rem;
box-shadow: 0 15px 35px rgba(47, 58, 86, 0.1);
max-width: 700px;
margin: -30px auto 40px; /* Sube un poco sobre la cabecera */
position: relative;
z-index: 10;
}
.contenedor_rosario h3 {
font-family: 'EB Garamond', serif;
font-size: 2rem;
color: var(--color-primario);
margin-bottom: 1rem;
text-align: center;
letter-spacing: 2px;
}
.controles-rosario {
display: flex;
justify-content: space-between;
align-items: center;
margin: 20px 0;
}
.btn-nav {
background-color: var(--color-primario);
color: white;
border: none;
padding: 10px 20px;
border-radius: 50px;
cursor: pointer;
font-weight: 600;
transition: all 0.3s ease;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.btn-nav:hover {
background-color: var(--color-acento);
transform: translateY(-2px);
}
.indicador-paso {
font-family: 'EB Garamond', serif;
font-weight: bold;
font-size: 1.2rem;
color: var(--color-primario);
}
.imagen-misterio {
width: 100%;
border-radius: 15px;
transition: opacity 0.5s ease;
border: 5px solid var(--color-secundario);
}
#imagen-misterio {
transition: opacity 0.4s ease-in-out;
display: block;
margin: 0 auto;
border: 4px solid var(--color-acento); /* Ese E8A23A en acción */
border-radius: 15px;
max-width: 100%;
height: auto;
}

View File

@ -0,0 +1,112 @@
/* CONTENEDOR */
.contenedor-intenciones {
max-width: 900px;
margin: auto;
padding: 2rem;
text-align: center;
}
/* FORMULARIO */
.formulario-intencion {
display: flex;
gap: 1rem;
justify-content: center;
margin-bottom: 2rem;
}
.formulario-intencion input {
padding: 0.7rem;
width: 60%;
border-radius: 8px;
border: 1px solid #ccc;
}
/* MURO DE HEXÁGONOS */
.muro-hexagonos {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 25px;
}
/* HEXÁGONO */
.hexagono {
width: 120px;
height: 70px;
background: #ffffffaa;
position: relative;
cursor: pointer;
transition: transform .2s;
display: flex;
justify-content: center;
align-items: center;
border-radius: 6px;
}
.hexagono:hover {
transform: scale(1.07);
}
.hexagono:before,
.hexagono:after {
content: "";
position: absolute;
width: 0;
border-left: 60px solid transparent;
border-right: 60px solid transparent;
}
.hexagono:before {
bottom: 100%;
border-bottom: 35px solid #ffffffaa;
}
.hexagono:after {
top: 100%;
border-top: 35px solid #ffffffaa;
}
/* ICONO DENTRO DEL HEXÁGONO */
.icono-intencion {
width: 40px;
height: 40px;
opacity: 0.9;
}
/* MODAL */
.modal {
display: none;
position: fixed;
inset: 0;
background: #00000088;
justify-content: center;
align-items: center;
}
.modal.visible {
display: flex;
}
.modal-contenido {
background: white;
padding: 2rem;
border-radius: 12px;
text-align: center;
max-width: 300px;
}
.cerrar {
float: right;
font-size: 1.5rem;
cursor: pointer;
}
.icono-modal {
width: 60px;
margin-bottom: 1rem;
}
.texto-modal {
font-size: 1.1rem;
margin-top: 1rem;
}

View File

@ -0,0 +1,69 @@
body {
font-family: Arial, sans-serif;
background: #f4f4f9;
margin: 0;
padding: 0;
display: flex;
flex-direction: column;
align-items: center;
}
.container {
background: white;
padding: 30px;
border-radius: 10px;
width: 90%;
max-width: 400px;
margin-top: 120px;
box-shadow: 0 4px 10px rgba(0,0,0,0.1);
}
h2 {
text-align: center;
margin-bottom: 20px;
color: #333;
}
label {
font-weight: bold;
display: block;
margin-top: 15px;
}
input {
width: 100%;
padding: 10px;
margin-top: 5px;
border-radius: 5px;
border: 1px solid #ccc;
}
button {
width: 100%;
margin-top: 20px;
padding: 12px;
background: #2196F3;
color: white;
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
}
button:hover {
background: #1976D2;
}
.msg {
margin-top: 15px;
text-align: center;
font-size: 14px;
}
.success {
color: green;
}
.error {
color: red;
}

View File

@ -0,0 +1,45 @@
/* Fuentes importadas corregidas */
@import url('https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400;0,600;1,400&family=Nunito:wght@400;600&display=swap');
:root {
/* Paleta refinada */
--color-primario: #2F3A56; /* Azul noche espiritual */
--color-hover: #24314A; /* Azul noche más oscuro */
--color-secundario: #EAF2FA; /* Azul muy suave */
--color-fondo: #FAF7F2; /* Crema papel antiguo */
--color-texto: #2b2b2b;
--color-acento: #E8A23A; /* Dorado litúrgico */
--blanco-puro: #FFFFFF;
--sombra: rgba(47, 58, 86, 0.15);
}
.oracion {
background-color: var(--blanco-puro);
margin: 2rem auto;
padding: 2rem;
max-width: 600px; /* Para que no se estire demasiado en PC */
border-radius: 15px;
box-shadow: 0 4px 15px var(--sombra);
border: none; /* Quitamos el borde oscuro para que sea más elegante */
text-align: center;
}
.titulo-oracion {
font-family: 'EB Garamond', serif;
font-size: 2rem;
font-weight: 600;
margin-bottom: 1rem;
text-transform: uppercase;
letter-spacing: 4px;
color: var(--color-primario);
padding-bottom: 0.5rem;
border-bottom: 2px solid var(--color-acento);
}
.contenido-oracion {
font-family: 'EB Garamond', serif;
font-size: 1.4rem;
line-height: 1.6;
color: var(--color-texto);
margin-bottom: 2rem;
}

View File

@ -0,0 +1,76 @@
/* Fuentes importadas corregidas */
@import url('https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400;0,600;1,400&family=Nunito:wght@400;600&display=swap');
:root {
/* Paleta refinada */
--color-primario: #2F3A56; /* Azul noche espiritual */
--color-hover: #24314A; /* Azul noche más oscuro */
--color-secundario: #EAF2FA; /* Azul muy suave */
--color-fondo: #FAF7F2; /* Crema papel antiguo */
--color-texto: #2b2b2b;
--color-acento: #E8A23A; /* Dorado litúrgico */
--blanco-puro: #FFFFFF;
--sombra: rgba(47, 58, 86, 0.15);
}
body {
font-family: 'Nunito', sans-serif;
background: var(--color-fondo);
margin: 0;
padding: 0;
justify-content: center;
align-items: center;
height: 100vh;
}
.container {
background: white;
padding: 30px;
border-radius: 10px;
width: 90%;
max-width: 400px;
box-shadow: 0 4px 10px rgba(0,0,0,0.5);
margin-left: auto;
margin-right: auto;
margin-top: 1.25rem;
}
label {
font-weight: bold;
display: block;
margin-top: 15px;
}
input {
width: 100%;
padding: 10px;
margin-top: 5px;
border-radius: 5px;
border: 1px solid #ccc;
}
button {
width: 100%;
margin-top: 20px;
padding: 12px;
background: var(--color-primario);
color: var(--blanco-puro);
border: none;
border-radius: 5px;
font-size: 16px;
cursor: pointer;
}
button:hover {
background: var(--color-hover);
}
.msg {
margin-top: 15px;
text-align: center;
font-size: 14px;
}
.success {
color: var(--color-acento);
}
.error {
color: red;
}

View File

@ -0,0 +1,32 @@
# Año liturgico 2026
1. Ciclo de Pascua (Fechas Movibles)
- Miércoles de Ceniza: 18 de febrero (Inicio de la Cuaresma).
- Domingo de Ramos: 29 de marzo.
- Jueves Santo: 2 de abril.
Viernes Santo: 3 de abril.
Domingo de Resurrección: 5 de abril.
Ascensión del Señor: 17 de mayo.
Domingo de Pentecostés: 24 de mayo.
Jesucristo, Sumo y Eterno Sacerdote: 28 de mayo.
Santísima Trinidad: 31 de mayo.
Corpus Christi: 4 de junio (En muchas localidades se traslada al domingo 7 de junio).
Sagrado Corazón de Jesús: 12 de junio.
2. Fiestas de Precepto en España
1 de enero Santa María, Madre de Dios
6 de enero Epifanía del Señor (Reyes)
19 de marzo San José, esposo de la Virgen
25 de julio Santiago Apóstol, Patrón de España
15 de agosto Asunción de la Bienaventurada Virgen María
1 de noviembre Todos los Santos
8 de diciembre Inmaculada Concepción (Patrona de España y de la Infantería)
25 de diciembre Natividad del Señor
3. Tiempos Litúrgicos y Ciclo de Lecturas
Para este año 2026, nos guiaremos principalmente por el Ciclo B en los domingos y el Ciclo II (par) para los días laborables.
Tiempo Ordinario (1ª parte): Del 12 de enero hasta el 17 de febrero.
Cuaresma: Del 18 de febrero al 2 de abril (mañana).
Tiempo de Pascua: Del 5 de abril al 24 de mayo.
Tiempo Ordinario (2ª parte): Del 25 de mayo hasta el 28 de noviembre.
Adviento: Comienza el domingo 29 de noviembre, dando inicio al nuevo año litúrgico (Ciclo C).

Binary file not shown.

View File

@ -0,0 +1,99 @@
[
{ "fecha": "2026-01-01", "color": "blanco", "tiempo": "Navidad (Sta. María, Madre de Dios)" },
{ "fecha": "2026-01-04", "color": "blanco", "tiempo": "Navidad (II Domingo después de Navidad)" },
{ "fecha": "2026-01-06", "color": "blanco", "tiempo": "Navidad (Epifanía del Señor)" },
{ "fecha": "2026-01-11", "color": "blanco", "tiempo": "Navidad (Bautismo del Señor)" },
{ "fecha": "2026-01-17", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-01-18", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-01-19", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-01-20", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-01-21", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-01-22", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-01-23", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-01-24", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-01-25", "color": "blanco", "tiempo": "Tiempo Ordinario (Conversión de San Pablo)" },
{ "fecha": "2026-01-26", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-01-27", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-01-28", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-01-29", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-01-30", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-01-31", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-02-01", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-02-02", "color": "blanco", "tiempo": "Tiempo Ordinario (Presentación del Señor)" },
{ "fecha": "2026-02-03", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-02-04", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-02-05", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-02-06", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-02-07", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-02-08", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-02-09", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-02-10", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-02-11", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-02-12", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-02-13", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-02-14", "color": "verde", "tiempo": "Tiempo Ordinario" },
{ "fecha": "2026-02-15", "color": "verde", "tiempo": "Domingo de Carnaval" },
{ "fecha": "2026-02-16", "color": "verde", "tiempo": "Carnaval (Lunes de Carnaval)" },
{ "fecha": "2026-02-17", "color": "verde", "tiempo": "Carnaval (Martes de Carnaval)" },
{ "fecha": "2026-02-18", "color": "morado", "tiempo": "Cuaresma (Miércoles de Ceniza)" },
{ "fecha": "2026-02-19", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-02-20", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-02-21", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-02-22", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-02-23", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-02-24", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-02-25", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-02-26", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-02-27", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-02-28", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-01", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-02", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-03", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-04", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-05", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-06", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-07", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-08", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-09", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-10", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-11", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-12", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-13", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-14", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-15", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-16", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-17", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-18", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-19", "color": "blanco", "tiempo": "Cuaresma (San José)" },
{ "fecha": "2026-03-20", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-21", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-22", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-23", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-24", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-25", "color": "violeta", "tiempo": "Cuaresma (Anunciación del Señor)" },
{ "fecha": "2026-03-26", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-27", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-28", "color": "morado", "tiempo": "Cuaresma" },
{ "fecha": "2026-03-29", "color": "rojo", "tiempo": "Semana Santa (Domingo de Ramos)" },
{ "fecha": "2026-03-30", "color": "morado", "tiempo": "Lunes de Semana Santa" },
{ "fecha": "2026-03-31", "color": "morado", "tiempo": "Martes de Semana Santa" },
{ "fecha": "2026-04-01", "color": "morado", "tiempo": "Semana Santa" },
{ "fecha": "2026-04-02", "color": "blanco", "tiempo": "Semana Santa (Jueves Santo)" },
{ "fecha": "2026-04-03", "color": "rojo", "tiempo": "Semana Santa (Viernes Santo)" },
{ "fecha": "2026-04-04", "color": "morado/negro", "tiempo": "Semana Santa" },
{ "fecha": "2026-04-05", "color": "blanco", "tiempo": "Semana Santa (Domingo de Resurrección)" },
{ "fecha": "2026-04-06", "color": "morado", "tiempo": "Lunes de Pascua" },
{ "fecha": "2026-05-17", "color": "blanco", "tiempo": "Tiempo Pascual (Ascensión del Señor)" },
{ "fecha": "2026-05-24", "color": "rojo", "tiempo": "Tiempo Pascual (Pentecostés)" },
{ "fecha": "2026-05-31", "color": "blanco", "tiempo": "Tiempo Ordinario (Santísima Trinidad)" },
{ "fecha": "2026-06-07", "color": "blanco", "tiempo": "Tiempo Ordinario (Corpus Christi)" },
{ "fecha": "2026-06-12", "color": "blanco", "tiempo": "Tiempo Ordinario (Sagrado Corazón de Jesús)" },
{ "fecha": "2026-08-15", "color": "blanco", "tiempo": "Tiempo Ordinario (Asunción de la Virgen)" },
{ "fecha": "2026-11-01", "color": "blanco", "tiempo": "Tiempo Ordinario (Todos los Santos)" },
{ "fecha": "2026-11-02", "color": "morado/negro", "tiempo": "Tiempo Ordinario (Fieles Difuntos)" },
{ "fecha": "2026-11-22", "color": "blanco", "tiempo": "Tiempo Ordinario (Cristo Rey)" },
{ "fecha": "2026-11-29", "color": "morado", "tiempo": "Adviento (I Domingo de Adviento)" },
{ "fecha": "2026-12-08", "color": "azul/blanco", "tiempo": "Adviento (Inmaculada Concepción)" },
{ "fecha": "2026-12-25", "color": "blanco", "tiempo": "Navidad (Natividad del Señor)" }
]

View File

@ -0,0 +1,9 @@
[
{ "color": "white", "codigo": "fff" },
{ "color": "green", "codigo": "008000" },
{ "color": "red", "codigo": "ff0000" },
{ "color": "white", "codigo": "fff" },
{ "color": "purple", "codigo": "800080" },
{ "color": "black", "codigo": "000000" },
{ "color": "rose", "codigo": "ffc0cb" }
]

View File

@ -0,0 +1,122 @@
[
{
"nombre": "José Villa Larramendi",
"nacimiento": "1914-01-01",
"fallecimiento": "1992-01-01",
"nota": "77 años"
},
{
"nombre": "José Luis Ema Diaz",
"nacimiento": "1950-06-01",
"fallecimiento": "2011-01-15",
"nota": "61 años"
},
{
"nombre": "Pilar de la Torre Toboso",
"nacimiento": "1918-05-24",
"fallecimiento": "2011-01-16",
"nota": "93 años"
},
{
"nombre": "Visi Correas González",
"nacimiento": "XXXX-11-14",
"fallecimiento": "2024-02-04",
"nota": ""
},
{
"nombre": "Mamen Fernández",
"nacimiento": "1950-03-03",
"fallecimiento": "2004-02-24",
"nota": ""
},
{
"nombre": "Maribel Gonsalves (madre Kayto)",
"nacimiento": null,
"fallecimiento": "2024-02-01",
"nota": "Mes aproximado"
},
{
"nombre": "Ricardo Martin (padre Kayto)",
"nacimiento": null,
"fallecimiento": "2024-02-01",
"nota": "Mes aproximado"
},
{
"nombre": "Carlos Irrisarri Neff",
"nacimiento": "1968-03-01",
"fallecimiento": "1988-03-26",
"nota": "20 años"
},
{
"nombre": "Carmen del Peral Mendoza",
"nacimiento": "1974-10-28",
"fallecimiento": "2002-04-07",
"nota": "27 años"
},
{
"nombre": "Fernando Collado",
"nacimiento": "1954-04-01",
"fallecimiento": "1996-04-01",
"nota": "42 años"
},
{
"nombre": "Paquita Diaz Espinosa",
"nacimiento": "1920-01-17",
"fallecimiento": "2007-05-17",
"nota": "87 años"
},
{
"nombre": "Pedro Queralt Lortzing",
"nacimiento": "1976-08-08",
"fallecimiento": "2021-05-16",
"nota": "45 años"
},
{
"nombre": "Madre de Gema",
"nacimiento": null,
"fallecimiento": "1982-08-01",
"nota": ""
},
{
"nombre": "Padre de Gema",
"nacimiento": null,
"fallecimiento": "1984-08-01",
"nota": ""
},
{
"nombre": "Mauricio Sánchez",
"nacimiento": "XXXX-09-22",
"fallecimiento": "XXXX-08-20",
"nota": ""
},
{
"nombre": "Trini González (Abuela Juan)",
"nacimiento": null,
"fallecimiento": "1992-08-01",
"nota": ""
},
{
"nombre": "ITA",
"nacimiento": null,
"fallecimiento": "2022-08-01",
"nota": ""
},
{
"nombre": "José Luis Ema Berenguer",
"nacimiento": "1910-01-01",
"fallecimiento": "1989-01-01",
"nota": ""
},
{
"nombre": "Amy y Jorge Gaupp (Mamama y Papapa)",
"nacimiento": null,
"fallecimiento": null,
"nota": "Sin fecha"
},
{
"nombre": "Compañero de HP (Heavy Metal)",
"nacimiento": null,
"fallecimiento": null,
"nota": "Aquel tan listo de HP"
}
]

View File

View File

@ -0,0 +1,114 @@
[
{
"titulo": "Sagrada Biblia (Conferencia Episcopal Española)",
"autor": "CEE",
"categoria": "Biblia",
"portada": "img/libros/biblia-cee.jpg",
"enlace": "https://www.amazon.es/Sagrada-Bibliapopular-geltexbac-EDICIONES-B%C3%8DBLICAS/dp/8422015617"
},
{
"titulo": "Catecismo de la Doctrina Cristiana (Astete)",
"autor": "Padre Jerónimo de Ripalda / Gaspar Astete",
"categoria": "Doctrina",
"portada": "img/libros/catecismo-astete.jpg",
"enlace": "https://www.amazon.es/Catecismo-Doctrina-Cristiana-Ediciones-Populares/dp/8483531496"
},
{
"titulo": "365 días con la Madre Teresa de Calcuta",
"autor": "José Luis González-Balado",
"categoria": "Santos",
"portada": "img/libros/madre-teresa.jpg",
"enlace": "https://www.amazon.es/d%C3%ADas-Madre-Teresa-Jos%C3%A9-Gonz%C3%A1lez-Balado-ebook/dp/B09SGHLP6R"
},
{
"titulo": "San Francisco de Asís",
"autor": "Luis Pérez Simón",
"categoria": "Santos",
"portada": "img/libros/san-francisco.jpg",
"enlace": "https://www.amazon.es/Francisco-Asis-Santos-Amigos-Dios/dp/8484079244"
},
{
"titulo": "Historia de un alma",
"autor": "Santa Teresita del Niño Jesús",
"categoria": "Santos",
"portada": "img/libros/teresita.jpg",
"enlace": "https://amzn.eu/d/0bv8Tit"
},
{
"titulo": "Imitación de Cristo",
"autor": "Tomás de Kempis",
"categoria": "Espiritualidad",
"portada": "img/libros/imitacion-cristo.jpg",
"enlace": "https://www.amazon.es/Imitaci%C3%B3n-Cristo-Tom%C3%A1s-Kempis/dp/8428526769"
},
{
"titulo": "Confesiones",
"autor": "San Agustín",
"categoria": "Espiritualidad",
"portada": "img/libros/confesiones-agustin.jpg",
"enlace": "https://www.amazon.es/Confesiones-San-Agust%C3%ADn/dp/8425436824"
},
{
"titulo": "Camino",
"autor": "San Josemaría Escrivá",
"categoria": "Espiritualidad",
"portada": "img/libros/camino.jpg",
"enlace": "https://www.amazon.es/Camino-San-Josemar%C3%ADa-Escriv%C3%A1-Balaguer/dp/8432131983"
},
{
"titulo": "Tratado de la verdadera devoción a la Virgen María",
"autor": "San Luis María Grignion de Montfort",
"categoria": "Espiritualidad",
"portada": "img/libros/devocion-montfort.jpg",
"enlace": "https://www.amazon.es/Tratado-verdadera-devoci%C3%B3n-Virgen-Mar%C3%ADa/dp/8490610204"
},
{
"titulo": "Catecismo de la Iglesia Católica",
"autor": "Iglesia Católica",
"categoria": "Doctrina",
"portada": "img/libros/catecismo-iglesia.jpg",
"enlace": "https://www.vatican.va/archive/catechism_sp/index_sp.html"
},
{
"titulo": "Youcat (Catecismo joven)",
"autor": "Iglesia Católica",
"categoria": "Doctrina",
"portada": "img/libros/youcat.jpg",
"enlace": "https://www.amazon.es/Youcat-Catecismo-Iglesia-Cat%C3%B3lica-j%C3%B3venes/dp/8428540124"
},
{
"titulo": "La Biblia de Jerusalén",
"autor": "Escuela Bíblica de Jerusalén",
"categoria": "Biblia",
"portada": "img/libros/biblia-jerusalen.jpg",
"enlace": "https://www.amazon.es/Biblia-Jerusal%C3%A9n-Latinoamericana-Edici%C3%B3n-Bolsillo/dp/8433019247"
},
{
"titulo": "Introducción al cristianismo",
"autor": "Joseph Ratzinger (Benedicto XVI)",
"categoria": "Doctrina",
"portada": "img/libros/introduccion-cristianismo.jpg",
"enlace": "https://www.amazon.es/Introducci%C3%B3n-al-cristianismo-Joseph-Ratzinger/dp/8425427814"
},
{
"titulo": "La fuerza del silencio",
"autor": "Cardenal Robert Sarah",
"categoria": "Espiritualidad",
"portada": "img/libros/fuerza-silencio.jpg",
"enlace": "https://www.amazon.es/fuerza-del-silencio-Cardenal-Sarah/dp/8422019973"
},
{
"titulo": "Historia de la Iglesia Católica",
"autor": "Eusebio de Cesarea",
"categoria": "Historia",
"portada": "img/libros/historia-iglesia.jpg",
"enlace": "https://www.amazon.es/Historia-eclesi%C3%A1stica-Eusebio-Cesarea/dp/8425436824"
},
{
"titulo": "El gran misterio: El Evangelio de la familia",
"autor": "Papa Francisco",
"categoria": "Doctrina",
"portada": "img/libros/gran-misterio.jpg",
"enlace": "https://www.amazon.es/gran-misterio-Evangelio-familia/dp/8422019973"
}
]

View File

@ -0,0 +1,152 @@
[
{ "numero": 1, "texto": "Bienaventurado el hombre que no sigue el consejo de los malvados... es como árbol plantado junto a corrientes de agua." },
{ "numero": 2, "texto": "Tú eres mi hijo; yo te he engendrado hoy. Pídeme, y te daré en herencia las naciones." },
{ "numero": 3, "texto": "Tú, Señor, eres mi escudo, mi gloria, el que levanta mi cabeza." },
{ "numero": 4, "texto": "En paz me acostaré y asimismo dormiré, porque solo tú, Señor, me haces vivir confiado." },
{ "numero": 5, "texto": "Escucha, oh Señor, mis palabras; considera mi gemir. Atiende a la voz de mi clamor." },
{ "numero": 6, "texto": "Señor, no me reprendas en tu furor, ni me castigues con tu ira. Ten misericordia de mí." },
{ "numero": 7, "texto": "Mi escudo está en Dios, que salva a los rectos de corazón." },
{ "numero": 8, "texto": "¡Oh Señor, Señor nuestro, cuán glorioso es tu nombre en toda la tierra!" },
{ "numero": 9, "texto": "Te alabaré, Señor, con todo mi corazón; contaré todas tus maravillas." },
{ "numero": 10, "texto": "Tú ves la pena y el dolor para recogerlos en tus manos; a ti se acoge el desamparado." },
{ "numero": 11, "texto": "En el Señor me refugio. ¿Cómo decís a mi alma: Escapa cual ave al monte?" },
{ "numero": 12, "texto": "Las palabras del Señor son palabras limpias, plata refinada en horno de tierra." },
{ "numero": 13, "texto": "¿Hasta cuándo, Señor? ¿Me olvidarás para siempre? Yo en tu misericordia he confiado." },
{ "numero": 14, "texto": "Dice el necio en su corazón: No hay Dios. El Señor mira desde los cielos sobre los hijos de los hombres." },
{ "numero": 15, "texto": "Señor, ¿quién habitará en tu tabernáculo? El que anda en integridad y hace justicia." },
{ "numero": 16, "texto": "Protégeme, Dios mío, porque en ti me refugio. Tú eres mi bien, nada hay fuera de ti." },
{ "numero": 17, "texto": "Guárdame como a la niña de tus ojos; escóndeme bajo la sombra de tus alas." },
{ "numero": 18, "texto": "Te amo, Señor, fortaleza mía. El Señor es mi roca, mi fortaleza y mi libertador." },
{ "numero": 19, "texto": "Los cielos cuentan la gloria de Dios, y el firmamento anuncia la obra de sus manos." },
{ "numero": 20, "texto": "Que el Señor te responda en el día de la angustia; que el nombre del Dios de Jacob te defienda." },
{ "numero": 21, "texto": "El rey se alegra en tu poder, Señor; y en tu salvación, ¡cuánto se regocija!" },
{ "numero": 22, "texto": "Dios mío, Dios mío, ¿por qué me has abandonado? Pero tú eres santo, tú que habitas entre las alabanzas." },
{ "numero": 23, "texto": "El Señor es mi pastor, nada me falta. En verdes pastos me hace descansar." },
{ "numero": 24, "texto": "Del Señor es la tierra y su plenitud; el mundo, y los que en él habitan." },
{ "numero": 25, "texto": "A ti, Señor, levanto mi alma. Dios mío, en ti confío; no sea yo avergonzado." },
{ "numero": 26, "texto": "Júzgame, oh Señor, porque yo en mi integridad he andado; he confiado en el Señor sin titubear." },
{ "numero": 27, "texto": "El Señor es mi luz y mi salvación; ¿a quién temeré? El Señor es la fortaleza de mi vida." },
{ "numero": 28, "texto": "A ti clamaré, oh Señor, roca mía; no te desentiendas de mí." },
{ "numero": 29, "texto": "Tributad al Señor, oh hijos de los poderosos, dad al Señor la gloria y el poder." },
{ "numero": 30, "texto": "Te exaltaré, Señor, porque me has levantado. Señor Dios mío, a ti clamé, y me sanaste." },
{ "numero": 31, "texto": "En ti, Señor, me he refugiado; no sea yo avergonzado jamás. En tu mano encomiendo mi espíritu." },
{ "numero": 32, "texto": "Bienaventurado aquel cuya transgresión ha sido perdonada, y cubierto su pecado." },
{ "numero": 33, "texto": "Alegraos, oh justos, en el Señor; en los íntegros es hermosa la alabanza." },
{ "numero": 34, "texto": "Bendeciré al Señor en todo tiempo; su alabanza estará siempre en mi boca." },
{ "numero": 35, "texto": "Disputa, oh Señor, con los que contra mí disputan; pelea contra los que me combaten." },
{ "numero": 36, "texto": "Señor, hasta los cielos llega tu misericordia, y tu fidelidad alcanza a las nubes." },
{ "numero": 37, "texto": "Confía en el Señor, y haz el bien; deléitate asimismo en el Señor, y él te concederá las peticiones de tu corazón." },
{ "numero": 38, "texto": "Señor, no me reprendas en tu furor. Mi corazón late apresuradamente, me faltan las fuerzas." },
{ "numero": 39, "texto": "Yo dije: Atenderé a mis caminos, para no pecar con mi lengua. Hazme saber, Señor, mi fin." },
{ "numero": 40, "texto": "Pacientemente esperé al Señor, y él se inclinó a mí, y oyó mi clamor." },
{ "numero": 41, "texto": "Bienaventurado el que piensa en el pobre; en el día malo lo librará el Señor." },
{ "numero": 42, "texto": "Como el ciervo brama por las corrientes de las aguas, así clama por ti, oh Dios, el alma mía." },
{ "numero": 43, "texto": "Júzgame, oh Dios, y defiende mi causa; envíame tu luz y tu verdad, que ellas me guíen." },
{ "numero": 44, "texto": "Con nuestros oídos hemos oído, oh Dios, nuestros padres nos han contado la obra que hiciste en sus días." },
{ "numero": 45, "texto": "Rebosa mi corazón palabra buena; mi lengua es pluma de escribiente muy ligero." },
{ "numero": 46, "texto": "Dios es nuestro amparo y fortaleza, nuestro pronto auxilio en las tribulaciones." },
{ "numero": 47, "texto": "Pueblos todos, batid las manos; aclamad a Dios con voz de júbilo." },
{ "numero": 48, "texto": "Grande es el Señor, y digno de ser en gran manera alabado en la ciudad de nuestro Dios." },
{ "numero": 49, "texto": "Oíd esto, pueblos todos; escuchad, habitantes todos del mundo. El hombre no permanecerá en su honra." },
{ "numero": 50, "texto": "El Dios de dioses, el Señor, ha hablado; del nacimiento del sol hasta donde se pone." },
{ "numero": 51, "texto": "Ten piedad de mí, oh Dios, conforme a tu misericordia. Crea en mí un corazón puro." },
{ "numero": 52, "texto": "Yo estoy como olivo verde en la casa de Dios; en la misericordia de Dios confío eternamente." },
{ "numero": 53, "texto": "Dijo el necio en su corazón: No hay Dios. Dios desde los cielos miró sobre los hijos de los hombres." },
{ "numero": 54, "texto": "Oh Dios, sálvame por tu nombre, y con tu poder defiéndeme. Dios es el que me ayuda." },
{ "numero": 55, "texto": "Escucha, oh Dios, mi oración. ¡Quién me diese alas como de paloma! Volaría yo, y descansaría." },
{ "numero": 56, "texto": "En Dios alabaré su palabra; en Dios he confiado; no temeré lo que pueda hacerme el hombre." },
{ "numero": 57, "texto": "Ten misericordia de mí, oh Dios; porque en ti ha confiado mi alma. Bajo la sombra de tus alas me refugiaré." },
{ "numero": 58, "texto": "Ciertamente hay un Dios que juzga en la tierra. ¿Habláis rectamente, oh poderosos?" },
{ "numero": 59, "texto": "Líbrame de mis enemigos, Dios mío; ponme a salvo de los que contra mí se levantan." },
{ "numero": 60, "texto": "Oh Dios, tú nos has desechado, nos quebrantaste. Danos socorro contra el enemigo." },
{ "numero": 61, "texto": "Oye, oh Dios, mi clamor; a mi oración atiende. Desde el cabo de la tierra clamaré a ti." },
{ "numero": 62, "texto": "En Dios solamente descansa mi alma; de él viene mi salvación. Él solamente es mi roca." },
{ "numero": 63, "texto": "Dios, Dios mío eres tú; de madrugada te buscaré; mi alma tiene sed de ti." },
{ "numero": 64, "texto": "Escucha, oh Dios, la voz de mi queja; guarda mi vida del miedo del enemigo." },
{ "numero": 65, "texto": "A ti te pertenece la alabanza en Sion, oh Dios. Tú oyes la oración; a ti vendrá toda carne." },
{ "numero": 66, "texto": "Aclamad a Dios con alegría, toda la tierra; cantad la gloria de su nombre." },
{ "numero": 67, "texto": "Dios tenga misericordia de nosotros, y nos bendiga; haga resplandecer su rostro sobre nosotros." },
{ "numero": 68, "texto": "Levántese Dios, sean esparcidos sus enemigos. Cantad a Dios, cantad salmos a su nombre." },
{ "numero": 69, "texto": "Sálvame, oh Dios, porque las aguas han entrado hasta el alma. Estoy hundido en cieno profundo." },
{ "numero": 70, "texto": "Oh Dios, acude a librarme; apresúrate, oh Señor, a socorrerme." },
{ "numero": 71, "texto": "En ti, oh Señor, me he refugiado; no sea yo avergonzado jamás. Sé para mí una roca de refugio." },
{ "numero": 72, "texto": "Oh Dios, da tus juicios al rey. Él juzgará a tu pueblo con justicia y a tus pobres con juicio." },
{ "numero": 73, "texto": "Ciertamente es bueno Dios a Israel, a los limpios de corazón. Pero yo, por poco resbalaron mis pasos." },
{ "numero": 74, "texto": "¿Por qué, oh Dios, nos has desechado para siempre? Acuérdate de tu congregación." },
{ "numero": 75, "texto": "Gracias te damos, oh Dios; tu nombre está cercano; los hombres cuentan tus maravillas." },
{ "numero": 76, "texto": "Dios es conocido en Judá; en Israel es grande su nombre. Tú, temible eres tú." },
{ "numero": 77, "texto": "Con mi voz clamé a Dios, y él me escuchó. Recordaba yo a Dios, y me conmovía." },
{ "numero": 78, "texto": "Escucha, pueblo mío, mi ley; inclinad vuestro oído a las palabras de mi boca. Hablaré parábolas." },
{ "numero": 79, "texto": "Oh Dios, vinieron las naciones a tu heredad; han profanado tu santo templo." },
{ "numero": 80, "texto": "Oh Pastor de Israel, escucha; tú que pastoreas como a ovejas a José. Haznos volver, oh Dios." },
{ "numero": 81, "texto": "Cantad con gozo a Dios, fortaleza nuestra; al Dios de Jacob aclamad con júbilo." },
{ "numero": 82, "texto": "Dios preside en la reunión de los dioses; en medio de los dioses juzga: ¿Hasta cuándo juzgaréis injustamente?" },
{ "numero": 83, "texto": "Oh Dios, no guardes silencio; no calles, oh Dios, ni te estés quieto." },
{ "numero": 84, "texto": "¡Cuán amables son tus moradas, oh Señor de los ejércitos! Anhela mi alma los atrios del Señor." },
{ "numero": 85, "texto": "Fuiste propicio a tu tierra, oh Señor; restauraste la cautividad de Jacob." },
{ "numero": 86, "texto": "Inclina, oh Señor, tu oído, y escúchame, porque estoy pobre y necesitado. Guarda mi alma." },
{ "numero": 87, "texto": "Su cimiento está en los montes santos. Ama el Señor las puertas de Sion más que todas las moradas de Jacob." },
{ "numero": 88, "texto": "Oh Señor, Dios de mi salvación, día y noche clamo delante de ti. Llegue mi oración a tu presencia." },
{ "numero": 89, "texto": "Las misericordias del Señor cantaré eternamente; de generación en generación haré notar tu fidelidad." },
{ "numero": 90, "texto": "Señor, tú nos has sido refugio de generación en generación. Enséñanos a contar nuestros días." },
{ "numero": 91, "texto": "El que habita al abrigo del Altísimo morará bajo la sombra del Omnipotente. Diré yo al Señor: Esperanza mía." },
{ "numero": 92, "texto": "Bueno es alabarte, oh Señor, y cantar salmos a tu nombre, oh Altísimo; anunciar por la mañana tu misericordia." },
{ "numero": 93, "texto": "El Señor reina; se vistió de magnificencia. Firmó también el mundo, que no se moverá." },
{ "numero": 94, "texto": "Dios de las venganzas, Señor, resplandece. ¿Hasta cuándo los impíos se gloriarán?" },
{ "numero": 95, "texto": "Venid, aclamemos alegremente al Señor; cantemos con júbilo a la roca de nuestra salvación." },
{ "numero": 96, "texto": "Cantad al Señor cántico nuevo; cantad al Señor, toda la tierra. Decid entre las naciones: El Señor reina." },
{ "numero": 97, "texto": "El Señor reina; regocíjese la tierra. Nubes y oscuridad hay alrededor de él; justicia y juicio son el cimiento de su trono." },
{ "numero": 98, "texto": "Cantad al Señor cántico nuevo, porque ha hecho maravillas; su diestra lo ha salvado." },
{ "numero": 99, "texto": "El Señor reina; temblarán los pueblos. Exaltad al Señor nuestro Dios, y postraos ante el estrado de sus pies." },
{ "numero": 100, "texto": "Cantad alegres a Dios, toda la tierra. Servid al Señor con alegría; venid ante su presencia con regocijo." },
{ "numero": 101, "texto": "Misericordia y juicio cantaré; a ti cantaré yo, Señor. Entenderé el camino de la perfección." },
{ "numero": 102, "texto": "Señor, escucha mi oración, y llegue mi clamor a ti. No escondas de mí tu rostro en el día de mi angustia." },
{ "numero": 103, "texto": "Bendice, alma mía, al Señor, y bendiga todo mi ser su santo nombre. Él es quien perdona todas tus iniquidades." },
{ "numero": 104, "texto": "Bendice, alma mía, al Señor. Señor Dios mío, mucho te has engrandecido; te has vestido de gloria y de magnificencia." },
{ "numero": 105, "texto": "Alabad al Señor, invocad su nombre; haced sabidas sus obras en los pueblos. Acordaos de las maravillas que él ha hecho." },
{ "numero": 106, "texto": "Aleluya. Alabad al Señor, porque él es bueno; porque para siempre es su misericordia." },
{ "numero": 107, "texto": "Alabad al Señor, porque él es bueno. Digan lo los redimidos del Señor, los que ha rescatado del poder del enemigo." },
{ "numero": 108, "texto": "Mi corazón está dispuesto, oh Dios; cantaré y entonaré salmos. Despierta, salterio y arpa." },
{ "numero": 109, "texto": "Oh Dios de mi alabanza, no calles. Porque boca de impío y boca de engañador se han abierto contra mí." },
{ "numero": 110, "texto": "Dijo el Señor a mi Señor: Siéntate a mi diestra, hasta que ponga a tus enemigos por estrado de tus pies." },
{ "numero": 111, "texto": "Alabaré al Señor con todo mi corazón. Las obras del Señor son grandes, buscadas por todos los que las quieren." },
{ "numero": 112, "texto": "Bienaventurado el hombre que teme al Señor, y en sus mandamientos se deleita en gran manera." },
{ "numero": 113, "texto": "Alabad, siervos del Señor, alabad el nombre del Señor. Sea el nombre del Señor bendito desde ahora y para siempre." },
{ "numero": 114, "texto": "Cuando salió Israel de Egipto, la casa de Jacob de un pueblo de lengua extraña, el mar lo vio, y huyó." },
{ "numero": 115, "texto": "No a nosotros, oh Señor, no a nosotros, sino a tu nombre da gloria, por tu misericordia, por tu verdad." },
{ "numero": 116, "texto": "Amo al Señor, pues ha oído mi voz y mis súplicas. ¿Qué pagaré al Señor por todos sus beneficios?" },
{ "numero": 117, "texto": "Alabad al Señor, naciones todas; pueblos todos, alabadle. Porque ha engrandecido sobre nosotros su misericordia." },
{ "numero": 118, "texto": "Alabad al Señor, porque él es bueno. La piedra que desecharon los edificadores ha venido a ser cabeza del ángulo." },
{ "numero": 119, "texto": "Bienaventurados los perfectos de camino, los que andan en la ley del Señor. Lámpara es a mis pies tu palabra." },
{ "numero": 120, "texto": "A la hora de mi angustia clamé al Señor, y él me respondió. Libra mi alma, oh Señor, del labio mentiroso." },
{ "numero": 121, "texto": "Alzaré mis ojos a los montes; ¿de dónde vendrá mi socorro? Mi socorro viene del Señor, que hizo los cielos y la tierra." },
{ "numero": 122, "texto": "Yo me alegré con los que me decían: A la casa del Señor iremos. Nuestros pies estuvieron dentro de tus puertas, oh Jerusalén." },
{ "numero": 123, "texto": "A ti levanté mis ojos, a ti que habitas en los cielos. Como los ojos de los siervos miran a la mano de sus señores." },
{ "numero": 124, "texto": "A no haber estado el Señor con nosotros, cuando se levantaron contra nosotros los hombres, vivos nos habrían tragado." },
{ "numero": 125, "texto": "Los que confían en el Señor son como el monte de Sion, que no se mueve, sino que permanece para siempre." },
{ "numero": 126, "texto": "Cuando el Señor hiciere volver la cautividad de Sion, seremos como los que sueñan. Los que sembraron con lágrimas, con regocijo segarán." },
{ "numero": 127, "texto": "Si el Señor no edificare la casa, en vano trabajan los que la edifican. Herencia del Señor son los hijos." },
{ "numero": 128, "texto": "Bienaventurado todo aquel que teme al Señor, que anda en sus caminos. Comerás del trabajo de tus manos." },
{ "numero": 129, "texto": "Mucho me han angustiado desde mi juventud, puede decir ahora Israel; mas no prevalecieron contra mí." },
{ "numero": 130, "texto": "De lo profundo, oh Señor, a ti clamo. Señor, oye mi voz. Si tú, Señor, miraras los pecados, ¿quién se mantendría?" },
{ "numero": 131, "texto": "Señor, no se ha envanecido mi corazón, ni mis ojos se enaltecieron. He sosegado y acallado mi alma." },
{ "numero": 132, "texto": "Acuérdate, oh Señor, de David, y de toda su aflicción. No entraré en la morada de mi casa hasta hallar lugar para el Señor." },
{ "numero": 133, "texto": "¡Mirad cuán bueno y cuán delicioso es habitar los hermanos juntos en armonía!" },
{ "numero": 134, "texto": "He aquí, bendecid al Señor, todos los siervos del Señor, los que en la casa del Señor estáis por las noches." },
{ "numero": 135, "texto": "Alabad el nombre del Señor; alabadle, siervos del Señor. Porque yo sé que el Señor es grande." },
{ "numero": 136, "texto": "Alabad al Señor, porque él es bueno; porque para siempre es su misericordia. Al que hizo los cielos con inteligencia." },
{ "numero": 137, "texto": "Junto a los ríos de Babilonia, allí nos sentábamos, y aun llorábamos, acordándonos de Sion." },
{ "numero": 138, "texto": "Te alabaré con todo mi corazón. El Señor cumplirá su propósito en mí; tu misericordia, oh Señor, es para siempre." },
{ "numero": 139, "texto": "Oh Señor, tú me has examinado y conocido. Tú has conocido mi sentarme y mi levantarme; has entendido desde lejos mis pensamientos." },
{ "numero": 140, "texto": "Líbrame, oh Señor, del hombre malo; guárdame de hombres violentos. Yo sé que el Señor tomará a su cargo la causa del afligido." },
{ "numero": 141, "texto": "Señor, a ti he clamado; apresúrate a mí. Sea mi oración delante de ti como el incienso." },
{ "numero": 142, "texto": "Con mi voz clamaré al Señor; con mi voz pediré al Señor misericordia. Delante de él expondré mi queja." },
{ "numero": 143, "texto": "Oh Señor, oye mi oración, escucha mis ruegos por tu verdad. No entres en juicio con tu siervo." },
{ "numero": 144, "texto": "Bendito sea el Señor, mi roca, quien adiestra mis manos para la batalla, y mis dedos para la guerra." },
{ "numero": 145, "texto": "Te exaltaré, mi Dios, mi Rey, y bendeciré tu nombre por los siglos de los siglos. Grande es el Señor." },
{ "numero": 146, "texto": "Alaba, alma mía, al Señor. Alabaré al Señor en mi vida; cantaré salmos a mi Dios mientras viva." },
{ "numero": 147, "texto": "Alabad al Señor, porque es bueno cantar salmos a nuestro Dios. Él sana a los quebrantados de corazón." },
{ "numero": 148, "texto": "Alabad al Señor desde los cielos; alabadle en las alturas. Alabadle, sol y luna; alabadle, todas las lucientes estrellas." },
{ "numero": 149, "texto": "Cantad al Señor cántico nuevo; su alabanza sea en la congregación de los santos. Alégrese Israel en su Hacedor." },
{ "numero": 150, "texto": "Todo lo que respira alabe al Señor. Aleluya. Alabadle en su santuario; alabadle en la magnificencia de su firmamento." }
]

View File

@ -0,0 +1,368 @@
[
{ "fecha": "2026-01-01", "santo": "Santa María, Madre de Dios", "color": "rosa" },
{ "fecha": "2026-01-02", "santo": "San Basilio Magno y San Gregorio Nacianceno" },
{ "fecha": "2026-01-03", "santo": "Santísimo Nombre de Jesús" },
{ "fecha": "2026-01-04", "santo": "Santa Ángela de Foligno" },
{ "fecha": "2026-01-05", "santo": "San Genovevo Torres"},
{ "fecha": "2026-01-06", "santo": "Epifanía del Señor", "color": "rojo" },
{ "fecha": "2026-01-07", "santo": "San Raimundo de Peñafort" },
{ "fecha": "2026-01-08", "santo": "San Severino" },
{ "fecha": "2026-01-09", "santo": "San Eulogio de Córdoba" },
{ "fecha": "2026-01-10", "santo": "San Gonzalo" },
{ "fecha": "2026-01-11", "santo": "Bautismo del Señor", "color": "blanco" },
{ "fecha": "2026-01-12", "santo": "Santa Tatiana" },
{ "fecha": "2026-01-13", "santo": "San Hilario de Poitiers" },
{ "fecha": "2026-01-14", "santo": "San Félix de Nola" },
{ "fecha": "2026-01-15", "santo": "San Mauro" },
{ "fecha": "2026-01-16", "santo": "San Marcelo I, Papa" },
{ "fecha": "2026-01-17", "santo": "San Antonio Abad", "descripcion":"Patron de los animales" },
{ "fecha": "2026-01-18", "santo": "Santa Prisca" },
{ "fecha": "2026-01-19", "santo": "San Mario", "descripcion":"y familia" },
{ "fecha": "2026-01-20", "santo": "San Sebastián", "descripcion":"mártir" },
{ "fecha": "2026-01-21", "santo": "Santa Inés", "descripcion":"virgen y mártir" },
{ "fecha": "2026-01-22", "santo": "San Vicente", "descripcion":"mártir" },
{ "fecha": "2026-01-23", "santo": "San Ildefonso de Toledo", "descripcion":"obispo" },
{ "fecha": "2026-01-24", "santo": "San Francisco de Sales", "descripcion":"Doctor de la Iglesia" },
{ "fecha": "2026-01-25", "santo": "Conversión de San Pablo", "descripcion":"apóstol" },
{ "fecha": "2026-01-26", "santo": "San Timoteo y San Tito", "descripcion":"obispos" },
{ "fecha": "2026-01-27", "santo": "Santa Ángela Merici" },
{ "fecha": "2026-01-28", "santo": "Santo Tomás de Aquino", "descripcion":"Doctor de la Iglesia. Patrón de los estudiantes, teólogo, filósofo" },
{ "fecha": "2026-01-29", "santo": "San Valero de Zaragoza" },
{ "fecha": "2026-01-30", "santo": "Santa Martina" },
{ "fecha": "2026-01-31", "santo": "San Juan Bosco", "descripcion":"Fundador de los Salesianos" },
{ "fecha": "2026-02-01", "santo": "Santa Brígida", "descripcion":"Patrona de Europa" },
{ "fecha": "2026-02-02", "santo": "Presentación del Señor (Candelaria)", "descripcion":"La Virgen María y San José presentan al Niño Jesús en el Templo" },
{ "fecha": "2026-02-03", "santo": "San Blas", "descripcion":"Protector de las enfermedades de garganta" },
{ "fecha": "2026-02-04", "santo": "San Gilberto", "descripcion":"obispo" },
{ "fecha": "2026-02-05", "santo": "Santa Águeda", "descripcion":"Patrona de las mujeres" },
{ "fecha": "2026-02-06", "santo": "San Pablo Miki", "descripcion":"y compañeros mártires" },
{ "fecha": "2026-02-07", "santo": "San Ricardo", "descripcion":"mártir" },
{ "fecha": "2026-02-08", "santo": "San Jerónimo Emiliani", "descripcion":"Patrón de los huérfanos" },
{ "fecha": "2026-02-09", "santo": "Santa Apolonia", "descripcion":"mártir" },
{ "fecha": "2026-02-10", "santo": "Santa Escolástica", "descripcion":"hermana de San Benito" },
{ "fecha": "2026-02-11", "santo": "Nuestra Señora de Lourdes", "descripcion":"La Virgen María se apareció en Lourdes a Santa Bernardita" },
{ "fecha": "2026-02-12", "santo": "Santa Eulalia de Barcelona", "descripcion":"virgen y mártir" },
{ "fecha": "2026-02-13", "santo": "San Benigno", "descripcion":"mártir" },
{ "fecha": "2026-02-14", "santo": "San Valentín","descripcion":"Patrón de los enamorados" },
{ "fecha": "2026-02-15", "santo": "San Claudio de la Colombière","descripcion":"confesor" },
{ "fecha": "2026-02-16", "santo": "San Onésimo", "descripcion":"esclavo convertido por San Pablo" },
{ "fecha": "2026-02-17", "santo": "Los Siete Santos Fundadores","descripcion":"de la Orden de los Servitas" },
{ "fecha": "2026-02-18", "santo": "Miércoles de Ceniza","descripcion":"Inicio de la Cuaresma" },
{ "fecha": "2026-02-19", "santo": "San Álvaro de Córdoba", "descripcion":"confesor" },
{ "fecha": "2026-02-20", "santo": "San Eleuterio" },
{ "fecha": "2026-02-21", "santo": "San Pedro Damián", "descripcion":"obispo y doctor de la Iglesia" },
{ "fecha": "2026-02-22", "santo": "Cátedra de San Pedro", "descripcion":"Fiesta de San Pedro, apóstol" },
{ "fecha": "2026-02-23", "santo": "San Policarpo", "descripcion":"obispo y mártir" },
{ "fecha": "2026-02-24", "santo": "San Modesto", "descripcion":"mártir" },
{ "fecha": "2026-02-25", "santo": "San Cesáreo de Nazianzo", "descripcion":"obispo" },
{ "fecha": "2026-02-26", "santo": "San Alejandro de Alejandría", "descripcion":"mártir" },
{ "fecha": "2026-02-27", "santo": "San Leandro de Sevilla", "descripcion":"obispo" },
{ "fecha": "2026-02-28", "santo": "San Román", "descripcion":"mártir" },
{ "fecha": "2026-02-29", "santo": "San Osvaldo" },
{ "fecha": "2026-03-01", "santo": "San David de Gales" },
{ "fecha": "2026-03-02", "santo": "San Chad de Mercia" },
{ "fecha": "2026-03-03", "santo": "San Casimiro", "descripcion":"Patrón de Polonia" },
{ "fecha": "2026-03-04", "santo": "San Lucio I, Papa" },
{ "fecha": "2026-03-05", "santo": "San Adrián de Nicomedia" },
{ "fecha": "2026-03-06", "santo": "San Coleta de Corbie" },
{ "fecha": "2026-03-07", "santo": "San Perpetuo y San Feliciano" },
{ "fecha": "2026-03-08", "santo": "San Juan de Dios", "descripcion":"Patrón de los hospitales" },
{ "fecha": "2026-03-09", "santo": "San Francescó de Borgia" },
{ "fecha": "2026-03-10", "santo": "San Macario de Alejandría" },
{ "fecha": "2026-03-11", "santo": "San Eulogio de Córdoba" },
{ "fecha": "2026-03-12", "santo": "San Gregorio Nacianceno" },
{ "fecha": "2026-03-13", "santo": "Santa Luisa de Marillac" },
{ "fecha": "2026-03-14", "santo": "San Matías", "descripcion":"apóstol" },
{ "fecha": "2026-03-15", "santo": "San Longino" },
{ "fecha": "2026-03-16", "santo": "Santa Juana de Chantal" },
{ "fecha": "2026-03-17", "santo": "San Patricio", "descripcion":"Patrón de Irlanda" },
{ "fecha": "2026-03-18", "santo": "San Cirilo de Jerusalén" },
{ "fecha": "2026-03-19", "santo": "San José", "descripcion":"Esposo de la Virgen María" },
{ "fecha": "2026-03-20", "santo": "San Cándido", "descripcion":"mártir" },
{ "fecha": "2026-03-21", "santo": "Santa Benedicta de la Cruz" },
{ "fecha": "2026-03-22", "santo": "San León I, Papa" },
{ "fecha": "2026-03-23", "santo": "San Turibio de Mogrovejo" },
{ "fecha": "2026-03-24", "santo": "San Gabriel de la Dolorosa" },
{ "fecha": "2026-03-25", "santo": "Anunciación del Señor", "descripcion":"El angel se apareció a la Virgen María"},
{ "fecha": "2026-03-26", "santo": "San Ezequiel Moreno" },
{ "fecha": "2026-03-27", "santo": "San Ruperto" },
{ "fecha": "2026-03-28", "santo": "San Guntrán" },
{ "fecha": "2026-03-29", "santo": "San Bertoldo" },
{ "fecha": "2026-03-30", "santo": "San Amando de Maastricht" },
{ "fecha": "2026-03-31", "santo": "San Benedicto José Labre" },
{ "fecha": "2026-04-01", "santo": "San Hugo de Grenoble" },
{ "fecha": "2026-04-02", "santo": "San Francisco de Paula" },
{ "fecha": "2026-04-03", "santo": "San Ricardo Pampuri" },
{ "fecha": "2026-04-04", "santo": "San Isidoro de Sevilla" },
{ "fecha": "2026-04-05", "santo": "San Vicente Ferrer" },
{ "fecha": "2026-04-06", "santo": "San Marcelino Champagnat" },
{ "fecha": "2026-04-07", "santo": "San Juan Bautista de la Salle" },
{ "fecha": "2026-04-08", "santo": "San Dionisio", "descripcion":"(obispo) y compañeros mártires" },
{ "fecha": "2026-04-09", "santo": "San Casimiro" },
{ "fecha": "2026-04-10", "santo": "San Ezequiel Moreno" },
{ "fecha": "2026-04-11", "santo": "San Esteban I", "descripcion":"Papa y mártir" },
{ "fecha": "2026-04-12", "santo": "San León IX", "descripcion":"Papa" },
{ "fecha": "2026-04-13", "santo": "San Hermenegildo" },
{ "fecha": "2026-04-14", "santo": "San Matías", "descripcion":"apóstol" },
{ "fecha": "2026-04-15", "santo": "San Dámaso I", "descripcion":"Papa" },
{ "fecha": "2026-04-16", "santo": "San Bernabé", "descripcion":"apóstol" },
{ "fecha": "2026-04-17", "santo": "San Aniceto", "descripcion":"Papa y mártir" },
{ "fecha": "2026-04-18", "santo": "San Apuleyo" },
{ "fecha": "2026-04-19", "santo": "San Expedito" },
{ "fecha": "2026-04-20", "santo": "San Jorge", "descripcion":"mártir" },
{ "fecha": "2026-04-21", "santo": "San Anselmo de Canterbury" },
{ "fecha": "2026-04-22", "santo": "San Soter y San Calixto", "descripcion":"Papas y mártires" },
{ "fecha": "2026-04-23", "santo": "San Jorge", "descripcion":"mártir" },
{ "fecha": "2026-04-24", "santo": "San Fidel de Sigmaringa" },
{ "fecha": "2026-04-25", "santo": "San Marcos", "descripcion":"evangelista" },
{ "fecha": "2026-04-26", "santo": "San Pedro de Verona" },
{ "fecha": "2026-04-27", "santo": "San Zita" },
{ "fecha": "2026-04-28", "santo": "San Luis María Grignion de Montfort" },
{ "fecha": "2026-04-29", "santo": "San Pedro Chanel" },
{ "fecha": "2026-04-30", "santo": "San Pío V", "descripcion":"Papa" },
{ "fecha": "2026-05-01", "santo": "San José Obrero"},
{ "fecha": "2026-05-02", "santo": "San Atanasio" },
{ "fecha": "2026-05-03", "santo": "San Felipe y Santiago", "descripcion":"apóstoles" },
{ "fecha": "2026-05-04", "santo": "San Florencio de Orange" },
{ "fecha": "2026-05-05", "santo": "San Hilario de Arlés" },
{ "fecha": "2026-05-06", "santo": "San Juan de Ávila" },
{ "fecha": "2026-05-07", "santo": "San Esteban de Hungría", "descripcion":"Rey de Hungría" },
{ "fecha": "2026-05-08", "santo": "San Miguel Garicoits" },
{ "fecha": "2026-05-09", "santo": "San Gregorio Magno" },
{ "fecha": "2026-05-10", "santo": "San Antonino de Florencia" },
{ "fecha": "2026-05-11", "santo": "San Ignacio de Loyola", "descripcion":"Fundador de la Compañía de Jesús" },
{ "fecha": "2026-05-12", "santo": "Santa Nereida" },
{ "fecha": "2026-05-13", "santo": "Nuestra Señora de Fátima", "descripcion":"La Virgen María se apareció en Fátima a tres pastorcitos" },
{ "fecha": "2026-05-14", "santo": "San Matías", "descripcion":"apóstol" },
{ "fecha": "2026-05-15", "santo": "San Isidro Labrador", "descripcion":"Patrón de los agricultores" },
{ "fecha": "2026-05-16", "santo": "San Juan Nepomuceno" },
{ "fecha": "2026-05-17", "santo": "San Pasquale Baylón" },
{ "fecha": "2026-05-18", "santo": "San Venancio" },
{ "fecha": "2026-05-19", "santo": "San Celestino V", "descripcion":"Papa" },
{ "fecha": "2026-05-20", "santo": "San Bernardino de Siena" },
{ "fecha": "2026-05-21", "santo": "Santa María Magdalena de Pazzi" },
{ "fecha": "2026-05-22", "santo": "Santa Rita de Casia" },
{ "fecha": "2026-05-23", "santo": "San Desiderio" },
{ "fecha": "2026-05-24", "santo": "Nuestra Señora, Auxilio de los Cristianos" },
{ "fecha": "2026-05-25", "santo": "San Gregorio VII", "descripcion":"Papa" },
{ "fecha": "2026-05-26", "santo": "San Felipe Neri" },
{ "fecha": "2026-05-27", "santo": "San Agustín de Cantorbery" },
{ "fecha": "2026-05-28", "santo": "San Germán de París" },
{ "fecha": "2026-05-29", "santo": "San Maximiliano Kolbe" },
{ "fecha": "2026-05-30", "santo": "Santa Juana de Arco" },
{ "fecha": "2026-05-31", "santo": "Visita de la Virgen María a su prima Santa Isabel" },
{ "fecha": "2026-06-01", "santo": "San Justino Mártir" },
{ "fecha": "2026-06-02", "santo": "San Marcelino de París" },
{ "fecha": "2026-06-03", "santo": "Santos Carlos Lwanga y compañeros mártires" },
{ "fecha": "2026-06-04", "santo": "San Francisco Caracciolo" },
{ "fecha": "2026-06-05", "santo": "San Bonifacio M. de Ligorio" },
{ "fecha": "2026-06-06", "santo": "San Norberto" },
{ "fecha": "2026-06-07", "santo": "San Roberto Belarmino" },
{ "fecha": "2026-06-08", "santo": "San Medardo" },
{ "fecha": "2026-06-09", "santo": "San Efrén" },
{ "fecha": "2026-06-10", "santo": "San Guillermo de Vercelli" },
{ "fecha": "2026-06-11", "santo": "San Bernabé, apóstol" },
{ "fecha": "2026-06-12", "santo": "Santos Juan y Pablo, mártires" },
{ "fecha": "2026-06-13", "santo": "San Antonio de Padua", "descripcion":"Doctor de la Iglesia" },
{ "fecha": "2026-06-14", "santo": "San Elías Profeta" },
{ "fecha": "2026-06-15", "santo": "San Vito", "descripcion":"y compañeros mártires" },
{ "fecha": "2026-06-16", "santo": "San Juan Francisco Régis" },
{ "fecha": "2026-06-17", "santo": "San Alberto Chmielowski" },
{ "fecha": "2026-06-18", "santo": "San Gregorio Barbarigo" },
{ "fecha": "2026-06-19", "santo": "Santo Romualdo", "descripcion":"y compañeros monjes" },
{ "fecha": "2026-06-20", "santo": "San Silverio", "descripcion":"Papa y mártir" },
{ "fecha": "2026-06-21", "santo": "San Luis Gonzaga" },
{ "fecha": "2026-06-22", "santo": "Santa Paulina" },
{ "fecha": "2026-06-23", "santo": "San José Cafasso" },
{ "fecha": "2026-06-24", "santo": "Natividad de San Juan Bautista", "descripcion":"Nacimiento de San Juan Bautista" },
{ "fecha": "2026-06-25", "santo": "Santos Cirilo y Metodio" },
{ "fecha": "2026-06-26", "santo": "San José María de Yermo y Parres" },
{ "fecha": "2026-06-27", "santo": "San Ladislao" },
{ "fecha": "2026-06-28", "santo": "San Ireneo", "descripcion":"obispo y mártir" },
{ "fecha": "2026-06-29", "santo": "San Pedro y San Pablo", "descripcion":"apóstoles" },
{ "fecha": "2026-06-30", "santo": "San Justo de Alcalá" },
{ "fecha": "2026-07-01", "santo": "Santa María Goretti" },
{ "fecha": "2026-07-02", "santo": "San Martín de Porres" },
{ "fecha": "2026-07-03", "santo": "Santos Tomás y Feliciano", "descripcion":"mártires" },
{ "fecha": "2026-07-04", "santo": "San Ulrico de Augsburgo" },
{ "fecha": "2026-07-05", "santo": "San Antonio María Zaccaria" },
{ "fecha": "2026-07-06", "santo": "San María Isabel de la Trinidad" },
{ "fecha": "2026-07-07", "santo": "San Cayetano" },
{ "fecha": "2026-07-08", "santo": "San Procopio" },
{ "fecha": "2026-07-09", "santo": "San Agustín Zhao Rong y compañeros mártires" },
{ "fecha": "2026-07-10", "santo": "San Benito", "descripcion":"Abad. Fundador de la Orden Benedictina. Medalla de San Benito ()" },
{ "fecha": "2026-07-11", "santo": "San Juan Bautista de la Salle" },
{ "fecha": "2026-07-12", "santo": "San Nabor y San Félix", "descripcion":"mártires" },
{ "fecha": "2026-07-13", "santo": "San Enrique" },
{ "fecha": "2026-07-14", "santo": "San Camilo de Lelis" },
{ "fecha": "2026-07-15", "santo": "Santa María Gorretti" },
{ "fecha": "2026-07-16", "santo": "Nuestra Señora del Carmen", "descripcion":"Patrona de los Carmelitas y los pescadores. Escapulario" },
{ "fecha": "2026-07-17", "santo": "San Alejo" },
{ "fecha": "2026-07-18", "santo": "San Camilo de Lelis" },
{ "fecha": "2026-07-19", "santo": "San Vicente de Paúl" },
{ "fecha": "2026-07-20", "santo": "San Apolinario" },
{ "fecha": "2026-07-21", "santo": "San Lorenzo de Brindis" },
{ "fecha": "2026-07-22", "santo": "Santa María Magdalena", "descripcion":"la apóstol de los apóstoles" },
{ "fecha": "2026-07-23", "santo": "Santos Apeles y Clemente", "descripcion":"mártires" },
{ "fecha": "2026-07-24", "santo": "San Cristóbal Magallanes y compañeros", "descripcion":"mártires" },
{ "fecha": "2026-07-25", "santo": "Santiago", "descripcion":"apóstol" },
{ "fecha": "2026-07-26", "santo": "San Joaquín y Santa Ana" },
{ "fecha": "2026-07-27", "santo": "Santa Marta" },
{ "fecha": "2026-07-28", "santo": "San Pedro Crisólogo" },
{ "fecha": "2026-07-29", "santo": "Santa María de los Ángeles" },
{ "fecha": "2026-07-30", "santo": "San Abdon y San Sennen", "descripcion":"mártires" },
{ "fecha": "2026-07-31", "santo": "San Ignacio de Loyola" },
{ "fecha": "2026-08-01", "santo": "San Alfonso María de Ligorio" },
{ "fecha": "2026-08-02", "santo": "Santa Eusebia" },
{ "fecha": "2026-08-03", "santo": "San Lamberto", "descripcion":"obispo y mártir" },
{ "fecha": "2026-08-04", "santo": "San Juan María Vianney" },
{ "fecha": "2026-08-05", "santo": "Dedicatoria de la Basílica de Letrán" },
{ "fecha": "2026-08-06", "santo": "Transfiguración del Señor"},
{ "fecha": "2026-08-07", "santo": "San Cajetano" },
{ "fecha": "2026-08-08", "santo": "San Dominico" },
{ "fecha": "2026-08-09", "santo": "San Román" },
{ "fecha": "2026-08-10", "santo": "San Lorenzo", "descripcion":"diácono y mártir" },
{ "fecha": "2026-08-11", "santo": "Santa Clara de Asís" },
{ "fecha": "2026-08-12", "santo": "San Maximiliano Kolbe" },
{ "fecha": "2026-08-13", "santo": "San Poncio", "descripcion":"mártir" },
{ "fecha": "2026-08-14", "santo": "San Maximiliano Kolbe" },
{ "fecha": "2026-08-15", "santo": "Asunción de la Virgen María" },
{ "fecha": "2026-08-16", "santo": "San Esteban de Hungría" },
{ "fecha": "2026-08-17", "santo": "San Jacinto" },
{ "fecha": "2026-08-18", "santo": "San Alberto Hurtado" },
{ "fecha": "2026-08-19", "santo": "San Juan Eudes" },
{ "fecha": "2026-08-20", "santo": "San Bernardo de Claraval" },
{ "fecha": "2026-08-21", "santo": "San Pío X, Papa" },
{ "fecha": "2026-08-22", "santo": "Santa María Reina" },
{ "fecha": "2026-08-23", "santo": "San Rosa de Lima" },
{ "fecha": "2026-08-24", "santo": "San Bartolomé", "descripcion":"apóstol" },
{ "fecha": "2026-08-25", "santo": "San Luis IX", "descripcion":"rey de Francia" },
{ "fecha": "2026-08-26", "santo": "San José de Calasanz" },
{ "fecha": "2026-08-27", "santo": "Santa Mónica" },
{ "fecha": "2026-08-28", "santo": "San Agustín", "descripcion":"obispo y doctor de la Iglesia. Fundador de los agustinos" },
{ "fecha": "2026-08-29", "santo": "Martirio de San Juan Bautista" },
{ "fecha": "2026-08-30", "santo": "Santa Rosa de Lima" },
{ "fecha": "2026-08-31", "santo": "San Ramón Nonato", "descripcion":"santo de las parturientas" },
{ "fecha": "2026-09-01", "santo": "San Egidio", "descripcion":"abate" },
{ "fecha": "2026-09-02", "santo": "Santa María de la Cabeza" },
{ "fecha": "2026-09-03", "santo": "San Gregorio Magno" },
{ "fecha": "2026-09-04", "santo": "San Rosendo" },
{ "fecha": "2026-09-05", "santo": "Santa Teresa de Calcuta" },
{ "fecha": "2026-09-06", "santo": "San Zacarías, profeta" },
{ "fecha": "2026-09-07", "santo": "San Cayetano" },
{ "fecha": "2026-09-08", "santo": "Natividad de la Virgen María", "color": "blanco" },
{ "fecha": "2026-09-09", "santo": "San Pedro Claver" },
{ "fecha": "2026-09-10", "santo": "San Nicolás de Tolentino" },
{ "fecha": "2026-09-11", "santo": "San Juan Gabriel Perboyre" },
{ "fecha": "2026-09-12", "santo": "Santísimo Nombre de María" },
{ "fecha": "2026-09-13", "santo": "San Juan Crisóstomo, obispo y doctor de la Iglesia" },
{ "fecha": "2026-09-14", "santo": "Exaltación de la Santa Cruz", "color": "rojo" },
{ "fecha": "2026-09-15", "santo": "Nuestra Señora de los Dolores" },
{ "fecha": "2026-09-16", "santo": "San Cornelio, Papa y San Cipriano, obispo, mártires" },
{ "fecha": "2026-09-17", "santo": "San Roberto Bellarmino" },
{ "fecha": "2026-09-18", "santo": "San José de Cupertino" },
{ "fecha": "2026-09-19", "santo": "San Januario, obispo y mártir" },
{ "fecha": "2026-09-20", "santo": "San Andrés Kim Taegon y compañeros mártires" },
{ "fecha": "2026-09-21", "santo": "San Mateo, apóstol y evangelista", "color": "rojo" },
{ "fecha": "2026-09-22", "santo": "San Maurilio" },
{ "fecha": "2026-09-23", "santo": "San Pío de Pietrelcina" },
{ "fecha": "2026-09-24", "santo": "Nuestra Señora de la Merced" },
{ "fecha": "2026-09-25", "santo": "San Cleofás" },
{ "fecha": "2026-09-26", "santo": "San Cosme y San Damián, mártires" },
{ "fecha": "2026-09-27", "santo": "San Vicente de Paúl" },
{ "fecha": "2026-09-28", "santo": "San Wenceslao" },
{ "fecha": "2026-09-29", "santo": "Santos Arcángeles Miguel, Gabriel y Rafael", "color": "blanco" },
{ "fecha": "2026-09-30", "santo": "San Jerónimo, sacerdote y doctor de la Iglesia" },
{ "fecha": "2026-10-01", "santo": "Santa Teresa de Lisieux" },
{ "fecha": "2026-10-02", "santo": "Ángel de la Guarda" },
{ "fecha": "2026-10-03", "santo": "San Gerardo Majella" },
{ "fecha": "2026-10-04", "santo": "San Francisco de Asís", "color": "rojo" },
{ "fecha": "2026-10-05", "santo": "Santa Faustina Kowalska" },
{ "fecha": "2026-10-06", "santo": "San Bruno" },
{ "fecha": "2026-10-07", "santo": "Nuestra Señora del Rosario", "color": "blanco" },
{ "fecha": "2026-10-08", "santo": "San Dionisio y compañeros mártires" },
{ "fecha": "2026-10-09", "santo": "San Juan Leonardi" },
{ "fecha": "2026-10-10", "santo": "San Daniel Comboni" },
{ "fecha": "2026-10-11", "santo": "San Juan XXIII, Papa" },
{ "fecha": "2026-10-12", "santo": "Nuestra Señora de Guadalupe", "color": "blanco" },
{ "fecha": "2026-10-13", "santo": "San Eduardo el Confesor" },
{ "fecha": "2026-10-14", "santo": "San Calixto I, Papa y mártir" },
{ "fecha": "2026-10-15", "santo": "Santa Teresa de Ávila, virgen y doctora de la Iglesia" },
{ "fecha": "2026-10-16", "santo": "San Gerardo de Brogne" },
{ "fecha": "2026-10-17", "santo": "San Ignacio de Antioquía, obispo y mártir" },
{ "fecha": "2026-10-18", "santo": "San Lucas, evangelista", "color": "rojo" },
{ "fecha": "2026-10-19", "santo": "San Pablo de la Cruz", "color": "rojo" },
{ "fecha": "2026-10-20", "santo": "San Juan de Capistrano" },
{ "fecha": "2026-10-21", "santo": "San Hilarión" },
{ "fecha": "2026-10-22", "santo": "San Juan Pablo II, Papa" },
{ "fecha": "2026-10-23", "santo": "San Juan de Brébeuf y San Isaac Jogues, sacerdotes y compañeros mártires" },
{ "fecha": "2026-10-24", "santo": "San Antonio María Claret" },
{ "fecha": "2026-10-25", "santo": "San Crispín y San Crispiniano, mártires" },
{ "fecha": "2026-10-26", "santo": "San Evaristo, Papa y mártir" },
{ "fecha": "2026-10-27", "santo": "San Frumencio" },
{ "fecha": "2026-10-28", "santo": "San Simón y San Judas, apóstoles", "color": "rojo" },
{ "fecha": "2026-10-29", "santo": "San Narciso de Jerusalén" },
{ "fecha": "2026-10-30", "santo": "San Andrés Avellino" },
{ "fecha": "2026-10-31", "santo": "San Wolfgang de Ratisbona" },
{ "fecha": "2026-11-01", "santo": "Todos los Santos", "color": "blanco" },
{ "fecha": "2026-11-02", "santo": "Conmemoración de los Fieles Difuntos", "color": "negro" },
{ "fecha": "2026-11-03", "santo": "San Martín de Tours" },
{ "fecha": "2026-11-04", "santo": "San Carlos Borromeo" },
{ "fecha": "2026-11-05", "santo": "San Leónidas y compañeros mártires" },
{ "fecha": "2026-11-06", "santo": "San Leonardo de Noblac" },
{ "fecha": "2026-11-07", "santo": "San Willibrord" },
{ "fecha": "2026-11-08", "santo": "San Godofredo de Amiens" },
{ "fecha": "2026-11-09", "santo": "Dedicación de la Basílica de San Juan de Letrán", "color": "blanco" },
{ "fecha": "2026-11-10", "santo": "San León III, Papa" },
{ "fecha": "2026-11-11", "santo": "San Martín de Tours" },
{ "fecha": "2026-11-12", "santo": "San Josafat Kuncevyc" },
{ "fecha": "2026-11-13", "santo": "Santa Francesca Romana" },
{ "fecha": "2026-11-14", "santo": "San Gerardo Sagredo" },
{ "fecha": "2026-11-15", "santo": "Santa Margarita de Escocia" },
{ "fecha": "2026-11-16", "santo": "San Gerardo Majella" },
{ "fecha": "2026-11-17", "santo": "San Gregorio III, Papa" },
{ "fecha": "2026-11-18", "santo": "San Romualdo" },
{ "fecha": "2026-11-19", "santo": "San Elredo de Rievaulx" },
{ "fecha": "2026-11-20", "santo": "Santa Felicidad y compañeros mártires" },
{ "fecha": "2026-11-21", "santo": "Presentación de la Virgen María", "color": "blanco" },
{ "fecha": "2026-11-22", "santo": "San Cecilia, virgen y mártir", "descripcion":"Patrona de la música" },
{ "fecha": "2026-11-23", "santo": "San Clemente I, Papa y mártir" },
{ "fecha": "2026-11-24", "santo": "San Andrés Dung-Lac y compañeros mártires" },
{ "fecha": "2026-11-25", "santo": "San Catalina de Alejandría, virgen y mártir" },
{ "fecha": "2026-11-26", "santo": "San Silvestre I, Papa" },
{ "fecha": "2026-11-27", "santo": "San Virgilio de Salzburgo" },
{ "fecha": "2026-11-28", "santo": "San Leandro de Sevilla" },
{ "fecha": "2026-11-29", "santo": "San Saturnino" },
{ "fecha": "2026-11-30", "santo": "San Andrés, apóstol", "color": "rojo" },
{ "fecha": "2026-12-01", "santo": "Santa Elena" },
{ "fecha": "2026-12-02", "santo": "San Bibiano, mártir" },
{ "fecha": "2026-12-03", "santo": "San Francisco Javier" },
{ "fecha": "2026-12-04", "santo": "San Juan Damasceno" },
{ "fecha": "2026-12-05", "santo": "Santa Sabela" },
{ "fecha": "2026-12-06", "santo": "San Nicolás de Bari" },
{ "fecha": "2026-12-07", "santo": "San Ambrosio, obispo y doctor de la Iglesia" },
{ "fecha": "2026-12-08", "santo": "Inmaculada Concepción de la Virgen María", "color": "blanco" },
{ "fecha": "2026-12-09", "santo": "San Juan Diego Cuauhtlatoatzin" },
{ "fecha": "2026-12-10", "santo": "San Efrén" },
{ "fecha": "2026-12-11", "santo": "San Dámaso I, Papa" },
{ "fecha": "2026-12-12", "santo": "Nuestra Señora de Guadalupe", "color": "blanco" },
{ "fecha": "2026-12-13", "santo": "Santa Lucía, virgen y mártir" },
{ "fecha": "2026-12-14", "santo": "San Juan de la Cruz, sacerdote y doctor de la Iglesia" },
{ "fecha": "2026-12-15", "santo": "Santa Ninfa" },
{ "fecha": "2026-12-16", "santo": "San Ezequiel Moreno" },
{ "fecha": "2026-12-17", "santo": "San Lázaro de Betania" },
{ "fecha": "2026-12-18", "santo": "San Gatiano" },
{ "fecha": "2026-12-19", "santo": "San Urbano I, Papa y mártir" },
{ "fecha": "2026-12-20", "santo": "San Dámaso I, Papa" },
{ "fecha": "2026-12-21", "santo": "San Pedro Canisio" },
{ "fecha": "2026-12-22", "santo": "San Francisco de Sales, obispo y doctor de la Iglesia" },
{ "fecha": "2026-12-23", "santo": "San Juan Kanty" },
{ "fecha": "2026-12-24", "santo": "Nochebuena" },
{ "fecha": "2026-12-25", "santo": "Navidad del Señor", "color": "blanco" },
{ "fecha": "2026-12-26", "santo": "San Esteban, primer mártir", "color": "rojo" },
{ "fecha": "2026-12-27", "santo": "San Juan, apóstol y evangelista", "color": "rojo" },
{ "fecha": "2026-12-28", "santo": "Inocentes, mártires", "color": "rojo" },
{ "fecha": "2026-12-29", "santo": "San Tomás Becket, obispo y mártir" },
{ "fecha": "2026-12-30", "santo": "Santos Adolfo y Juan Fisher, mártires" },
{ "fecha": "2026-12-31", "santo": "San Silvestre I, Papa" }
]

View File

@ -0,0 +1,31 @@
services:
app:
image: php:8.2-apache
container_name: rc_app
restart: always
volumes:
- ./:/var/www/html
environment:
- MYSQL_HOST=db
- MYSQL_USER=rc_user
- MYSQL_PASSWORD=tu_password_segura
networks:
- rc_network
db:
image: mariadb:10.11
container_name: rc_db
restart: always
environment:
MYSQL_DATABASE: recursos_catolicos
MYSQL_USER: rc_user
MYSQL_PASSWORD: tu_password_segura
MYSQL_ROOT_PASSWORD: root_password_super_segura
volumes:
- ./mysql_data:/var/lib/mysql
networks:
- rc_network
networks:
rc_network:
driver: bridge

33
recursos-catolicos/header.html Executable file
View File

@ -0,0 +1,33 @@
<header class="header-hoy" id="header-hoy">
<h1 class="titulo">RECURSOS CATÓLICOS</h1>
<div class="fecha">
<span id="fecha-hoy">Martes, 15 de enero de 2026</span>
<div class="ciclo">
<span id="nombre_ciclo">ABC</span>
<span id="ciclo_par_impar">Par o impar</span>
</div>
<div id="indicador-liturgico" class="liturgico">
<span class="color-dia" id="color-liturgico" title="Tiempo Ordinario"></span>
<span class="nombre-color" id="tiempo-liturgico">Tiempo Ordinario</span>
</div>
</div>
<div class="santo">
<h2 id="santo-del-dia">Santa Maria Madre de Dios</h2>
<div id="descripcion-santo-del-dia">(Patrona de los conductores)</div>
</div>
<button class="menu-toggle" id="menu-toggle"></button>
<nav class="menu-principal" id="menu-principal">
<a href="index.html">Inicio</a>
<a href="rosario.html">Rosario</a>
<a href="oraciones-basicas.html">Oraciones Básicas</a>
<a href="intenciones.html">Intenciones</a>
<a href="biblioteca-cristiana.html">Biblioteca cristiana</a>
</nav>
<script src="js/header.js"></script>
</header>

BIN
recursos-catolicos/img/biblia.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

BIN
recursos-catolicos/img/santos.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

87
recursos-catolicos/index.html Executable file
View File

@ -0,0 +1,87 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Recursos Católicos</title>
<link rel="icon" type="image/x-icon" href="img/favicon.png">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/estilos.css">
</head>
<body>
<div id="header-container"></div>
<main class="contenedor">
<!-- DIFUNTO -->
<section class="tarjeta-difunto">
<div id="difunto-hoy"></div>
</section>
<!-- SALMO -->
<section class="bloque">
<blockquote class="salmo" id="__salmo">
Salmo del día no disponible
</section>
<!-- INTENCIÓN -->
<section class="bloque">
<h3>🙏 Intención de hoy</h3>
<p class="intencion">
<ul>
<li>Por la paz en el mundo y el fin de los conflictos.</li>
<li>Por los enfermos y sus familias, para que encuentren consuelo y sanación.</li>
<li>Por los líderes del mundo, para que gobiernen con sabiduría y justicia.</li>
</ul>
</p>
<a href="intenciones.html" class="boton">Intenciones de oración</a>
</section>
<!-- DIARIO -->
<!--
<section class="bloque bloque-intimo">
<h3>🕯 Mi oración de hoy</h3>
<p class="texto-suave">
Un espacio personal para escribir lo que llevas en el corazón
</p>
<a href="diario-oracion.html" class="boton">Escribir en mi diario</a>
</section>-->
<section class="bloque bloque-fondo" style="background-image: url('img/rosario.jpg');">
<div class="capa-oscura">
<h3>Rosario</h3>
<p id="nombre_misterio">Misterios Gozosos</p>
<a href="rosario.html" class="boton">Rezar ahora</a>
</div>
</section>
<section class="bloque bloque-fondo" style="background-image: url('img/oraciones.jpg');">
<div class="capa-oscura">
<h3>Oraciones</h3>
<p>Padre Nuestro, Ave María, Gloria</p>
<a href="oraciones-basicas.html" class="boton">Ver Oraciones</a>
</div>
</section>
<section class="bloque bloque-fondo" style="background-image: url('img/biblioteca.jpg');">
<div class="capa-oscura">
<h3>Biblioteca cristiana</h3>
<p>Recomendaciones de libros y recursos cristianos</p>
<a href="biblioteca-cristiana.html" class="boton">Ver Biblioteca</a>
</div>
</section>
<!-- RECURSOS -->
<!--
<section class="recursos">
<a href="santos.html">Santos y novenas</a>
<a href="calendario-liturgico/index.php">Calendario litúrgico</a>
<a href="biblioteca-basica-cristiana.html">Biblioteca</a>
</section>
-->
</main>
<script src="js/header.js"></script>
<script src="js/codigo.js"></script>
</body>
</html>

View File

@ -0,0 +1,40 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Intenciones de oración</title>
<link rel="icon" type="image/x-icon" href="img/favicon.png">
<link rel="stylesheet" href="css/estilos.css">
<link rel="stylesheet" href="css/intenciones.css">
</head>
<body>
<div id="header-container"></div>
<div class="contenedor-intenciones">
<h3>🙏 Intenciones de Oración</h3>
<p class="texto-suave">Cada intención se guarda solo en tu dispositivo.</p>
<div class="formulario-intencion">
<input type="text" id="nueva-intencion" placeholder="Escribe tu intención...">
<button id="btn-guardar" class="boton">Añadir</button>
</div>
<div id="muro-intenciones" class="muro-hexagonos"></div>
</div>
<!-- MODAL -->
<div id="modal-intencion" class="modal">
<div class="modal-contenido">
<span id="cerrar-modal" class="cerrar">&times;</span>
<img id="icono-modal" class="icono-modal" src="">
<p id="texto-modal" class="texto-modal"></p>
</div>
</div>
<script src="js/header.js"></script>
<script src="js/intenciones.js"></script>
</body>
</html>

View File

@ -0,0 +1,63 @@
document.addEventListener("DOMContentLoaded", () => {
const container = document.getElementById("booksContainer");
const searchInput = document.getElementById("searchInput");
const categoryFilter = document.getElementById("categoryFilter");
let libros = [];
// Cargar datos desde JSON
fetch("data/libros.json")
.then(res => res.json())
.then(data => {
libros = data;
renderBooks(libros);
});
// Renderizar tarjetas
function renderBooks(lista) {
container.innerHTML = "";
if (lista.length === 0) {
container.innerHTML = "<p>No se encontraron resultados.</p>";
return;
}
lista.forEach(libro => {
const card = document.createElement("div");
card.className = "card";
card.innerHTML = `
<img src="${libro.portada}" alt="Portada de ${libro.titulo}">
<h3>${libro.titulo}</h3>
<p><strong>Autor:</strong> ${libro.autor}</p>
<p><strong>Categoría:</strong> ${libro.categoria}</p>
<a href="${libro.enlace}" target="_blank">Leer / Descargar</a>
`;
container.appendChild(card);
});
}
// Búsqueda en tiempo real
searchInput.addEventListener("input", filtrar);
categoryFilter.addEventListener("change", filtrar);
function filtrar() {
const texto = searchInput.value.toLowerCase();
const categoria = categoryFilter.value;
const filtrados = libros.filter(libro => {
const coincideTexto =
libro.titulo.toLowerCase().includes(texto) ||
libro.autor.toLowerCase().includes(texto) ||
libro.categoria.toLowerCase().includes(texto);
const coincideCategoria =
categoria === "all" || libro.categoria === categoria;
return coincideTexto && coincideCategoria;
});
renderBooks(filtrados);
}
});

206
recursos-catolicos/js/codigo.js Executable file
View File

@ -0,0 +1,206 @@
/* ============================================
ESPERAR A QUE EL HEADER SE CARGUE
============================================ */
window.addEventListener("load", () => {
// Damos un pequeño margen para que header.html termine de insertarse
setTimeout(() => {
inicializarVariables();
difuntos();
visualizarDatos();
visualizarSalmo();
visualizarRosario();
cargarYActualizarTodo();
}, 200);
});
/* ============================================
VARIABLES GLOBALES
============================================ */
let fechaHoyElem, indicadorLiturgicoElem, cabeceraHoy, menuPrincipalElem,
nombreCicloElem, cicloParImparElem, descripcionSantoDelDiaElem,
errorElem, difuntoHoyElem, salmoDelDiaElem;
/* ============================================
INICIALIZAR VARIABLES
============================================ */
function inicializarVariables() {
cabeceraHoy = document.getElementById('header-hoy');
menuPrincipalElem = document.getElementById('menu-principal');
errorElem = document.getElementById('__error');
difuntoHoyElem = document.getElementById('difunto-hoy');
salmoDelDiaElem = document.getElementById('salmo-pcpal');
fechaHoyElem = document.getElementById('fecha-hoy');
nombreCicloElem = document.getElementById('nombre_ciclo');
cicloParImparElem = document.getElementById('ciclo_par_impar');
descripcionSantoDelDiaElem = document.getElementById('descripcion-santo-del-dia');
indicadorLiturgicoElem = document.getElementById('indicador-liturgico');
}
/* ============================================
DIFUNTOS
============================================ */
async function difuntos() {
const hoy = new Date();
const mesHoy = hoy.getMonth() + 1;
const diaHoy = hoy.getDate();
try {
const res = await fetch('data/difuntos.json');
const listaDifuntos = await res.json();
const elDifunto = listaDifuntos.find(d => {
if (!d.fallecimiento || d.fallecimiento.includes('XXXX')) return false;
const f = d.fallecimiento.split('-');
return parseInt(f[1]) === mesHoy && parseInt(f[2]) === diaHoy;
});
if (elDifunto && difuntoHoyElem) {
difuntoHoyElem.innerHTML = `<span class="nombre-difunto">DEP 🕊️ ${elDifunto.nombre}</span>`;
const intencionGral = document.querySelector('.intencion');
if (intencionGral) {
intencionGral.innerHTML = `<li>Hoy pedimos especialmente por ${elDifunto.nombre}</li>`;
}
}
} catch (e) {
console.error("Error en la carga de difuntos:", e);
}
}
/* ============================================
SALMO DEL DÍA
============================================ */
async function visualizarSalmo() {
const salmoElem = document.getElementById('salmo-pcpal');
salmoDelDiaElem.textContent = 'loco';
salmoElem.textContent = `pepito`;
try {
const res = await fetch('data/salmos.json');
if (!res.ok) throw new Error("No se pudo cargar el salmo");
const listaSalmos = await res.json();
const hoy = new Date();
const inicioAnio = new Date(hoy.getFullYear(), 0, 0);
const dif = hoy - inicioAnio;
const diaDelAnio = Math.floor(dif / (1000 * 60 * 60 * 24));
const indiceHoy = diaDelAnio % listaSalmos.length;
const salmoDeHoy = listaSalmos[indiceHoy];
if (salmoDeHoy && salmoElem) {
salmoElem.textContent = `${salmoDeHoy.texto}`;
} else {
salmoElem.textContent = `${diaDelAnio}`;
}
} catch (e) {
console.error("Error cargando el salmo:", e);
if (salmoElem) salmoElem.textContent = "El Señor es mi pastor, nada me falta.";
}
}
/* ============================================
ROSARIO DEL DÍA
============================================ */
function visualizarRosario() {
const MISTERIOS_DATA = {
0: { nombre: "Gloriosos" },
1: { nombre: "Gozosos"},
2: { nombre: "Dolorosos" },
3: { nombre: "Gloriosos" },
4: { nombre: "Luminosos" },
5: { nombre: "Dolorosos" },
6: { nombre: "Gozosos" }
};
const hoy = new Date();
const diaSemana = hoy.getDay();
const misterioHoy = MISTERIOS_DATA[diaSemana];
const nombreMistElem = document.getElementById('nombre_misterio');
if (nombreMistElem) {
nombreMistElem.textContent = `MISTERIOS ${misterioHoy.nombre.toUpperCase()}`;
}
}
/* ============================================
FECHA HUMANA
============================================ */
function visualizarDatos() {
const opcionesFecha = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
const hoy = new Date();
fechaHoyElem.textContent = hoy.toLocaleDateString('es-ES', opcionesFecha);
}
/* ============================================
CALENDARIO LITÚRGICO
============================================ */
async function cargarYActualizarTodo() {
const hoy = new Date();
const fechaISO = hoy.toISOString().split('T')[0];
cicloParImparElem.textContent = hoy.getFullYear() % 2 === 0 ? "Año Par" : "Año Impar";
if (hoy.getFullYear() % 3 === 0) {
nombreCicloElem.textContent = "Ciclo C -";
} else if (hoy.getFullYear() % 3 === 1) {
nombreCicloElem.textContent = "Ciclo A -";
} else {
nombreCicloElem.textContent = "Ciclo B -";
}
try {
const respuesta = await fetch('data/calendario-liturgico.json');
const datosCalendario = await respuesta.json();
const datosHoy = datosCalendario.find(dia => dia.fecha === fechaISO);
const mapaColores = {
"verde": "#2d5a27",
"morado": "#5d2d91",
"blanco": "#ffffff",
"rojo": "#b30000",
"azul": "#0074d9",
"rosa": "#e7b1cc",
"violeta": "#a0b5b0"
};
if (datosHoy) {
const colorReal = mapaColores[datosHoy.color] || "#333";
const colorTexto = (datosHoy.color === "blanco" || datosHoy.color === "rosa") ? "#2b2b2b" : "#ffffff";
cabeceraHoy.style.backgroundColor = colorReal;
menuPrincipalElem.style.backgroundColor = colorReal;
cabeceraHoy.style.color = colorTexto;
indicadorLiturgicoElem.textContent = datosHoy.tiempo;
indicadorLiturgicoElem.style.color = colorTexto;
}
} catch (error) {
console.error("Error cargando el calendario:", error);
}
}

188
recursos-catolicos/js/header.js Executable file
View File

@ -0,0 +1,188 @@
/* ================================
1. CARGAR HEADER Y LUEGO INICIAR
================================ */
fetch("header.html")
.then(res => res.text())
.then(html => {
document.getElementById("header-container").innerHTML = html;
// Ahora que el header YA existe en el DOM:
inicializarVariables();
difuntos();
santoDelDia();
visualizarDatos();
cargarYActualizarTodo();
})
.catch(err => console.error("Error cargando header:", err));
/* ================================
2. VARIABLES GLOBALES
================================ */
let fechaHoyElem, santoDelDiaElem, indicadorLiturgicoElem, cabeceraHoy, menuPrincipalElem,
nombreCicloElem, cicloParImparElem, descripcionSantoDelDiaElem,
errorElem, difuntoHoyElem;
/* ================================
3. INICIALIZAR VARIABLES
================================ */
function inicializarVariables() {
cabeceraHoy = document.getElementById('header-hoy');
fechaHoyElem = document.getElementById('fecha-hoy');
nombreCicloElem = document.getElementById('nombre_ciclo');
cicloParImparElem = document.getElementById('ciclo_par_impar');
santoDelDiaElem = document.getElementById('santo-del-dia');
descripcionSantoDelDiaElem = document.getElementById('descripcion-santo-del-dia');
indicadorLiturgicoElem = document.getElementById('indicador-liturgico');
menuPrincipalElem = document.getElementById('menu-principal');
difuntoHoyElem = document.getElementById('difunto-hoy');
}
/* ================================
4. CALENDARIO LITÚRGICO
================================ */
async function cargarYActualizarTodo() {
const hoy = new Date();
const fechaISO = hoy.toISOString().split('T')[0];
cicloParImparElem.textContent = hoy.getFullYear() % 2 === 0 ? "Año Par" : "Año Impar";
if (hoy.getFullYear() % 3 === 0) {
nombreCicloElem.textContent = "Ciclo C -";
} else if (hoy.getFullYear() % 3 === 1) {
nombreCicloElem.textContent = "Ciclo A -";
} else {
nombreCicloElem.textContent = "Ciclo B -";
}
try {
const respuesta = await fetch('data/calendario-liturgico.json');
const datosCalendario = await respuesta.json();
const datosHoy = datosCalendario.find(dia => dia.fecha === fechaISO);
const mapaColores = {
"verde": "#2d5a27",
"morado": "#5d2d91",
"blanco": "#ffffff",
"rojo": "#b30000",
"azul": "#0074d9",
"rosa": "#e7b1cc",
"violeta": "#a0b5b0"
};
if (datosHoy) {
const colorReal = mapaColores[datosHoy.color] || "#333";
const colorTexto = (datosHoy.color === "blanco" || datosHoy.color === "rosa") ? "#2b2b2b" : "#ffffff";
cabeceraHoy.style.backgroundColor = colorReal;
menuPrincipalElem.style.backgroundColor = colorReal;
cabeceraHoy.style.color = colorTexto;
const tituloMain = cabeceraHoy.querySelector('.titulo');
if (tituloMain) tituloMain.style.color = colorTexto;
indicadorLiturgicoElem.textContent = datosHoy.tiempo;
indicadorLiturgicoElem.style.color = colorTexto;
} else {
indicadorLiturgicoElem.textContent = "-";
indicadorLiturgicoElem.textContent = "No hay datos para hoy: " + fechaISO;
}
} catch (error) {
console.error("Error cargando el calendario:", error);
}
}
/* ================================
5. DIFUNTOS
================================ */
async function difuntos() {
const hoy = new Date();
const mesHoy = hoy.getMonth() + 1;
const diaHoy = hoy.getDate();
try {
const res = await fetch('data/difuntos.json');
const listaDifuntos = await res.json();
const elDifunto = listaDifuntos.find(d => {
if (!d.fallecimiento || d.fallecimiento.includes('XXXX')) return false;
const f = d.fallecimiento.split('-');
return parseInt(f[1]) === mesHoy && parseInt(f[2]) === diaHoy;
});
if (elDifunto && difuntoHoyElem) {
const anioFallecimiento = parseInt(elDifunto.fallecimiento.split('-')[0]);
const anosPasados = hoy.getFullYear() - anioFallecimiento;
difuntoHoyElem.innerHTML = `<span class="nombre-difunto">DEP 🕊️ ${elDifunto.nombre}${anosPasados}º aniversario</span>`;
}
} catch (e) {
console.error("Error en la carga de difuntos:", e);
}
}
/* ================================
6. SANTO DEL DÍA
================================ */
async function santoDelDia() {
const hoy = new Date();
const offset = hoy.getTimezoneOffset() * 60000;
const fechaISO = new Date(hoy - offset).toISOString().split('T')[0];
try {
const res = await fetch('data/santos.json');
const listaSantos = await res.json();
const elSanto = listaSantos.find(d => d.fecha === fechaISO);
if (elSanto) {
santoDelDiaElem.textContent = elSanto.santo;
descripcionSantoDelDiaElem.textContent = elSanto.descripcion || "";
}
} catch (e) {
console.error("Error en la carga de santos:", e);
}
}
/* ================================
7. FECHA HUMANA
================================ */
function visualizarDatos() {
const opcionesFecha = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
const hoy = new Date();
fechaHoyElem.textContent = hoy.toLocaleDateString('es-ES', opcionesFecha);
}
/* ================================
8. MENÚ MÓVIL
================================ */
document.addEventListener("click", (e) => {
const toggle = document.getElementById("menu-toggle");
const menu = document.getElementById("menu-principal");
if (!toggle || !menu) return;
if (e.target === toggle) {
menu.classList.toggle("activo");
}
});

View File

@ -0,0 +1,61 @@
// Cargar intenciones desde localStorage
let intenciones = JSON.parse(localStorage.getItem("intenciones")) || [];
const muro = document.getElementById("muro-intenciones");
const input = document.getElementById("nueva-intencion");
const btn = document.getElementById("btn-guardar");
// Iconos disponibles
const iconos = ["vela.png", "flor.png", "cruz.png"];
// Crear un hexágono
function crearHexagono(intencion, icono) {
const hex = document.createElement("div");
hex.className = "hexagono";
hex.dataset.intencion = intencion;
hex.dataset.icono = icono;
hex.innerHTML = `<img src="img/iconos/${icono}" class="icono-intencion">`;
muro.appendChild(hex);
}
// Guardar intención
btn.addEventListener("click", () => {
const texto = input.value.trim();
if (texto === "") return;
const icono = iconos[Math.floor(Math.random() * iconos.length)];
intenciones.push({ texto, icono });
localStorage.setItem("intenciones", JSON.stringify(intenciones));
crearHexagono(texto, icono);
input.value = "";
});
// Mostrar intenciones guardadas
intenciones.forEach(i => crearHexagono(i.texto, i.icono));
// MODAL
const modal = document.getElementById("modal-intencion");
const cerrar = document.getElementById("cerrar-modal");
const textoModal = document.getElementById("texto-modal");
const iconoModal = document.getElementById("icono-modal");
// Abrir modal al tocar un hexágono
document.addEventListener("click", e => {
const hex = e.target.closest(".hexagono");
if (!hex) return;
textoModal.textContent = hex.dataset.intencion;
iconoModal.src = "img/iconos/" + hex.dataset.icono;
modal.classList.add("visible");
});
// Cerrar modal
cerrar.onclick = () => modal.classList.remove("visible");
modal.onclick = e => {
if (e.target === modal) modal.classList.remove("visible");
};

46
recursos-catolicos/js/login.js Executable file
View File

@ -0,0 +1,46 @@
async function login() {
const email = document.getElementById("email").value.trim();
const password = document.getElementById("password").value.trim();
const msg = document.getElementById("mensaje");
msg.textContent = "";
msg.className = "msg";
if (!email || !password) {
msg.textContent = "Por favor, completa todos los campos.";
msg.classList.add("error");
return;
}
try {
const response = await fetch("https://recursos-catolicos.es:8080/auth/login", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email, password })
});
if (response.ok) {
const data = await response.json();
// Guardar token
localStorage.setItem("token", data.token);
msg.textContent = "Inicio de sesión correcto.";
msg.classList.add("success");
// Redirigir a la página privada
setTimeout(() => {
window.location.href = "intenciones.html";
}, 1000);
} else {
const error = await response.text();
msg.textContent = "Error: " + error;
msg.classList.add("error");
}
} catch (e) {
msg.textContent = "No se pudo conectar con el servidor. Error: " + e;
msg.classList.add("error");
}
}

View File

@ -0,0 +1,36 @@
async function registrar() {
const nombre = document.getElementById("nombre").value.trim();
const email = document.getElementById("email").value.trim();
const password = document.getElementById("password").value.trim();
const msg = document.getElementById("mensaje");
msg.textContent = "";
msg.className = "msg";
if (!nombre || !email || !password) {
msg.textContent = "Por favor, completa todos los campos.";
msg.classList.add("error");
return;
}
try {
const response = await fetch("http://localhost:8080/auth/register", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ nombre, email, password })
});
if (response.ok) {
msg.textContent = "Cuenta creada correctamente.";
msg.classList.add("success");
} else {
const error = await response.text();
msg.textContent = "Error: " + error;
msg.classList.add("error");
}
} catch (e) {
msg.textContent = "No se pudo conectar con el servidor." + e;
msg.classList.add("error");
}
}

View File

@ -0,0 +1,66 @@
let indiceMisterio = 0;
let misteriosHoy = null;
const MISTERIOS_DATA = {
0: { nombre: "Gloriosos", titulos: ["La Resurrección", "La Ascensión", "La Venida del Espíritu Santo", "La Asunción", "La Coronación de María"] },
1: { nombre: "Gozosos", titulos: ["La Anunciación", "La Visitación", "El Nacimiento", "La Presentación", "El Niño perdido en el Templo"] },
2: { nombre: "Dolorosos", titulos: ["La Agonía", "La Flagelación", "La Coronación de Espinas", "Jesús con la Cruz", "La Crucifixión"] },
3: { nombre: "Gloriosos", titulos: ["La Resurrección", "La Ascensión", "La Venida del Espíritu Santo", "La Asunción", "La Coronación de María"] },
4: { nombre: "Luminosos", titulos: ["El Bautismo", "Las Bodas de Caná", "El Anuncio del Reino", "La Transfiguración", "La Institución de la Eucaristía"] },
5: { nombre: "Dolorosos", titulos: ["La Agonía", "La Flagelación", "La Coronación de Espinas", "Jesús con la Cruz", "La Crucifixión"] },
6: { nombre: "Gozosos", titulos: ["La Anunciación", "La Visitación", "El Nacimiento", "La Presentación", "El Niño perdido en el Templo"] }
};
function inicializarRosario() {
const hoy = new Date();
misteriosHoy = MISTERIOS_DATA[hoy.getDay()];
const nombreMistElem = document.getElementById('nombre_misterio');
if (nombreMistElem) nombreMistElem.textContent = `Misterios ${misteriosHoy.nombre}`;
actualizarVistaMisterio();
// Eventos de los botones con comprobación de existencia (buena práctica)
const btnSiguiente = document.getElementById('siguiente');
const btnAnterior = document.getElementById('anterior');
if (btnSiguiente) {
btnSiguiente.addEventListener('click', () => {
indiceMisterio = (indiceMisterio + 1) % 5;
actualizarVistaMisterio();
});
}
if (btnAnterior) {
btnAnterior.addEventListener('click', () => {
indiceMisterio = (indiceMisterio - 1 + 5) % 5;
actualizarVistaMisterio();
});
}
}
function actualizarVistaMisterio() {
const titulo = document.getElementById('titulo_misterio');
const imagen = document.getElementById('imagen-misterio');
const paso = document.getElementById('paso-actual');
if (titulo) {
titulo.textContent = `${indiceMisterio + 1}º Misterio: ${misteriosHoy.titulos[indiceMisterio]}`;
}
if (paso) paso.textContent = indiceMisterio + 1;
if (imagen) {
const carpeta = misteriosHoy.nombre.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
// Asegúrate de que las fotos sean jpg y sigan este patrón: gozosos1.jpg, gozosos2.jpg...
imagen.src = `img/${carpeta}${indiceMisterio + 1}.jpg`;
// Animación suave
imagen.style.opacity = 0;
setTimeout(() => { imagen.style.opacity = 1; }, 50);
}
}
window.addEventListener('load', inicializarRosario);

View File

@ -0,0 +1,63 @@
const MISTERIOS_POR_DIA = {
0: { nombre: "Gloriosos", titulos: ["La Resurrección", "La Ascensión", "La Venida del Espíritu Santo", "La Asunción", "La Coronación de María"] }, // Domingo
1: { nombre: "Gozosos", titulos: ["La Anunciación", "La Visitación", "El Nacimiento", "La Presentación", "El Niño perdido en el Templo"] }, // Lunes
2: { nombre: "Dolorosos", titulos: ["La Agonía", "La Flagelación", "La Coronación de Espinas", "Jesús con la Cruz", "La Crucifixión"] }, // Martes
3: { nombre: "Gloriosos", titulos: ["La Resurrección", "La Ascensión", "La Venida del Espíritu Santo", "La Asunción", "La Coronación de María"] }, // Miércoles
4: { nombre: "Luminosos", titulos: ["El Bautismo", "Las Bodas de Caná", "El Anuncio del Reino", "La Transfiguración", "La Institución de la Eucaristía"] }, // Jueves
5: { nombre: "Dolorosos", titulos: ["La Agonía", "La Flagelación", "La Coronación de Espinas", "Jesús con la Cruz", "La Crucifixión"] }, // Viernes
6: { nombre: "Gozosos", titulos: ["La Anunciación", "La Visitación", "El Nacimiento", "La Presentación", "El Niño perdido en el Templo"] } // Sábado
};
function inicializarVariables() {
cabeceraHoy = document.getElementById('header-hoy');
fechaHoyElem = document.getElementById('fecha-hoy');
santoDelDiaElem = document.getElementById('santo-del-dia');
nombreMisterioElem = document.getElementById('nombre_misterio');
tituloMisterioElem = document.getElementById('titulo_misterio');
descripcionMisterioElem = document.getElementById('descripcion_misterio');
imagenMisterioElem = document.getElementById('imagen-misterio');
}
function datosCabecera() {
// Aquí definimos el formato completo con el AÑO
const opcionesFecha = { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' };
const hoy = new Date();
if (fechaHoyElem) {
fechaHoyElem.textContent = hoy.toLocaleDateString('es-ES', opcionesFecha);
}
}
function cargarMisterioHoy() {
const hoy = new Date();
const diaSemana = hoy.getDay();
const misterioHoy = MISTERIOS_POR_DIA[diaSemana];
// ACTUALIZAR TÍTULOS DE MISTERIOS
indiceMisterio=0; // Siempre el primer misterio del día
nombreMisterioElem.textContent = `Misterios ${misterioHoy.nombre}`;
tituloMisterioElem.textContent = `1º Misterio ${misterioHoy.nombre}: ${misterioHoy.titulos[0]}`;
// ACTUALIZAR CONTENIDO DEL MISTERIO
const tituloMisterioElem = document.getElementById('titulo_misterio');
if (tituloMisterioElem) {
tituloMisterioElem.textContent = `1º Misterio ${misterioHoy.nombre}: ${misterioHoy.titulos[0]}`;
}
const imagenMisterioElem = document.getElementById('imagen-misterio');
if (imagenMisterioElem) {
const imgId = misterioHoy.nombre.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g, "");
imagenMisterioElem.src = `img/${imgId}1.jpg`;
}
}
// Evento de carga
window.addEventListener("load", () => {
inicializarVariables();
datosCabecera(); // Esta pone la fecha con AÑO
cargarMisterioHoy(); // Esta ahora solo pone los misterios sin romper la fecha
if (typeof santoDelDia === "function") santoDelDia();
});

33
recursos-catolicos/login.html Executable file
View File

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Iniciar sesión</title>
<link rel="icon" type="image/x-icon" href="img/favicon.png">
<link rel="stylesheet" href="css/estilos.css">
<link rel="stylesheet" href="css/login.css">
</head>
<body>
<div id="header-container"></div>
<div class="container">
<h2>Iniciar sesión</h2>
<label>Email</label>
<input type="email" id="email" placeholder="correo@example.com">
<label>Contraseña</label>
<input type="password" id="password" placeholder="••••••••">
<button onclick="login()">Entrar</button>
<div id="mensaje" class="msg"></div>
</div>
<script src="js/header.js"></script>
<script src="js/login.js"></script>
</body>
</html>

View File

@ -0,0 +1,76 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Oraciones Básicas</title>
<link rel="icon" type="image/x-icon" href="img/favicon.png">
<link rel="stylesheet" href="css/estilos.css">
<link rel="stylesheet" href="css/oraciones-basicas.css">
</head>
<body>
<div id="header-container"></div>
<main class="contenedor">
<!-- PADRE NUESTRO -->
<section class="bloque">
<div class="titulo-oracion">Padre Nuestro</div>
<div class="contenido-oracion">
<p>Padre nuestro que estás en los cielos, santificado sea tu Nombre; venga tu reino; hágase tu voluntad, así en la tierra como en el cielo. Danos hoy nuestro pan de cada día; perdona nuestras ofensas, como también nosotros perdonamos a los que nos ofenden; no nos dejes caer en la tentación y líbranos del mal. Amén.</p>
</div>
</section>
<!-- AVE MARÍA -->
<section class="bloque">
<div class="titulo-oracion">Ave María</div>
<div class="contenido-oracion">
<p>Dios te salve, María, llena eres de gracia; el Señor es contigo; bendita tú eres entre todas las mujeres, y bendito es el fruto de tu vientre, Jesús. Santa María, Madre de Dios, ruega por nosotros, pecadores, ahora y en la hora de nuestra muerte. Amén.</p>
</div>
</section>
<!-- GLORIA -->
<section class="bloque">
<div class="titulo-oracion">Gloria</div>
<div class="contenido-oracion">
<p>Gloria a Dios en el cielo, y en la tierra paz a los hombres que ama el Señor. Por tu inmensa gloria te alabamos, te bendecimos, te adoramos, te glorificamos, te damos gracias, Señor Dios, Rey celestial, Dios Padre todopoderoso. Señor, Hijo único, Jesucristo. Señor Dios, Cordero de Dios, Hijo del Padre, tú que quitas el pecado del mundo, ten piedad de nosotros; tú que quitas el pecado del mundo, atiende nuestra súplica; tú que estás sentado a la derecha del Padre, ten piedad de nosotros. Porque sólo tú eres santo, sólo tú Señor, sólo tú Altísimo, Jesucristo, con el Espíritu Santo, en la gloria de Dios Padre. Amén.</p>
</div>
</section>
<!-- SALVE -->
<section class="bloque">
<div class="titulo-oracion">Salve</div>
<div class="contenido-oracion">
<p>Salve, Reina y Madre de misericordia, vida, dulzura y esperanza nuestra; salve. A ti llamamos los desterrados hijos de Eva; a ti suspiramos, gimiendo y llorando en este valle de lágrimas. Ea, pues, Señora abogada nuestra, vuelve a nosotros esos tus ojos misericordiosos; y después de este destierro muéstranos a Jesús, fruto bendito de tu vientre. Oh clemente, oh piadosa, oh dulce Virgen María. Ruega por nosotros, Santa Madre de Dios, para que seamos dignos de alcanzar las promesas de Nuestro Señor Jesucristo. Amén.</p>
</div>
</section>
<!-- CREDO -->
<section class="bloque">
<div class="titulo-oracion">Credo</div>
<div class="contenido-oracion">
<p>Creo en Dios, Padre todopoderoso, Creador del cielo y de la tierra;</p>
<p>Creo en Jesucristo, su único Hijo, nuestro Señor; que fue concebido por obra y gracia del Espíritu Santo, nació de Santa María Virgen; padeció bajo el poder de Poncio Pilato; fue crucificado, muerto y sepultado; descendió a los infiernos; al tercer día resucitó de entre los muertos; subió a los cielos y está sentado a la derecha de Dios Padre todopoderoso; desde allí ha de venir a juzgar a vivos y muertos.</p>
<p>Creo en el Espíritu Santo; la santa Iglesia católica; la comunión de los santos; el perdón de los pecados; la resurrección de la carne; y la vida eterna. Amén.</p>
</div>
</section>
<!-- CREDO NICENO -->
<section class="bloque">
<div class="titulo-oracion">Credo Niceno</div>
<div class="contenido-oracion">
<p>Creo en un solo Dios, Padre todopoderoso, Creador del cielo y de la tierra, de todo lo visible y lo invisible.</p>
<p>Creo en un solo Señor, Jesucristo, Hijo único de Dios, nacido del Padre antes de todos los siglos: Dios de Dios, Luz de Luz, Dios verdadero de Dios verdadero, engendrado, no creado, de la misma naturaleza que el Padre, por quien todo fue hecho; que por nosotros los hombres y por nuestra salvación bajó del cielo, y por obra del Espíritu Santo se encarnó de María, la Virgen, y se hizo hombre; y por nuestra causa fue crucificado en tiempos de Poncio Pilato; padeció y fue sepultado, y resucitó al tercer día, según las Escrituras; y subió al cielo, y está sentado a la derecha del Padre; y de nuevo vendrá con gloria para juzgar a vivos y muertos, y su reino no tendrá fin. </p>
<p>Creo en el Espíritu Santo, Señor y dador de vida, que procede del Padre y del Hijo, que con el Padre y el Hijo recibe una misma adoración y gloria, y que habló por los profetas. Creo en la Iglesia, que es una, santa, católica y apostólica.</p>
<p>Confieso que hay un solo bautismo para el perdón de los pecados. Espero la resurrección de los muertos y la vida del mundo futuro. Amén.</p>
</div>
</section>
</main>
<script src="js/header.js"></script>
<script src="js/codigo.js"></script>
</body>
</html>

View File

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Hola Mundo</h1>
<p>Esta es una página de prueba.</p>
<p>¡Bienvenido a la programación web!</p>
<p>Espero que disfrutes aprendiendo HTML.</p>
</body>
</html>

View File

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Crear cuenta</title>
<link rel="icon" type="image/x-icon" href="img/favicon.png">
<link rel="stylesheet" href="css/estilos.css">
<link rel="stylesheet" href="css/register.css">
</head>
<body>
<div id="header-container"></div>
<div class="container">
<h2>Crear cuenta</h2>
<label>Nombre</label>
<input type="text" id="nombre" placeholder="Tu nombre">
<label>Email</label>
<input type="email" id="email" placeholder="correo@example.com">
<label>Contraseña</label>
<input type="password" id="password" placeholder="••••••••">
<button onclick="registrar()">Registrarme</button>
<div id="mensaje" class="msg"></div>
</div>
<script src="js/header.js"></script>
<script src="js/register.js"></script>
</body>
</html>

26
recursos-catolicos/rosario.html Executable file
View File

@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="img/favicon.png">
<title>Rosario</title>
<link rel="stylesheet" href="css/estilos.css">
</head>
<body>
<div id="header-container"></div>
<div class="contenedor_rosario">
<h3 id="titulo_misterio">Primer Misterio Gozoso - La Anunciación del Ángel a María</h3>
<div class="controles-rosario">
<button id="anterior" class="btn-nav">← Anterior</button>
<div class="indicador-paso"><span id="paso-actual">1</span> / 5</div>
<button id="siguiente" class="btn-nav">Siguiente →</button>
</div>
<img src="img/gozosos1.jpg" alt="Rosario Image" id="imagen-misterio" class="imagen-misterio">
</div>
<script src="js/header.js"></script>
<script src="js/rosario.js"></script>
</body>
</html>