Limpieza, organizacion y depuracion de pagina web

This commit is contained in:
Tatiana Villa 2026-04-27 10:48:49 +02:00
parent 6f562dadfc
commit c816ffa6f4
116 changed files with 88 additions and 42674 deletions

View File

@ -1,74 +0,0 @@
:root {
--f1-red: #a00000;
--dark-bg: #15151e;
--card-bg: #1f1f27;
--text: #ffffff;
--border-color: #38383f;
--titulo-color: #ff4c4c;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: var(--dark-bg);
color: var(--text);
margin: 0;
padding: 20px;
}
header {
padding-bottom: 10px;
margin-bottom: 30px;
text-align: center;
color: var(--titulo-color);
}
.dashboard {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
.stat-card {
background-color: var(--card-bg);
padding: 20px;
border-radius: 10px;
border-left: 4px solid var(--f1-red);
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 10px;
}
th, td {
text-align: left;
padding: 8px;
border-bottom: 1px solid var(--border-color);
}
th {
color: var(--titulo-color);
font-size: 0.8rem;
text-transform: uppercase;
}
.pos {
font-weight: bold;
color: var(--f1-red);
}
.cuenta-atras {
margin-bottom: 15px;
text-align: center;
border-bottom: 4px solid var(--f1-red);
}
#countdown {
font-size: 2rem;
font-weight: bold;
letter-spacing: 2px;
}

View File

@ -1,8 +1,3 @@
/* ============================================================
TAI AGE | Estilos principales
Paleta VS Code Dark + acentos azul AGE
============================================================ */
:root {
--bg: #1e1e1e;
--bg-alt: #252526;
@ -24,7 +19,7 @@
html { font-size: 16px; scroll-behavior: smooth; }
body {
font-family: 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
font-family: Consolas, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
background: var(--bg);
color: var(--text);
line-height: 1.7;
@ -126,6 +121,53 @@ a:hover { text-decoration: underline; }
.stat-num { font-size: 1.8rem; font-weight: 700; color: var(--accent); }
.stat-lbl { font-size: .78rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: .08em; }
/* Proyectos */
.project-card {
background: var(--bg-alt);
border: 1px solid var(--border);
border-radius: 10px;
padding: 1.25rem;
display: flex;
flex-direction: column;
font-family: consolas, 'Segoe UI Mono', monospace;
}
.card-title {
font-size: 1.1rem;
color: var(--accent);
margin-bottom: .4rem;
}
.card-text {
font-size: .9rem;
color: var(--text);
margin-bottom: 1rem;
line-height: 1.5;
}
.project-card #countdown {
font-size: 1.2rem;
color: var(--text);
font-weight: bold;
margin-top: auto;
font-family: console, monospace;
border: 1px solid var(--text);
border-radius: 6px;
padding: .4rem .8rem;
text-align: center;
}
.card-tecnologia {
font-size: .8rem;
color: var(--text-muted);
margin-top: auto;
font-style: italic;
padding-top: .8rem;
}
/* ── Cuenta atrás ──────────────────────────────────────────── */
.countdown-wrap {
margin-top: 2rem;
@ -421,7 +463,6 @@ 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); }
@ -453,7 +494,7 @@ a:hover { text-decoration: underline; }
border: 1px solid var(--border);
color: var(--text);
cursor: pointer;
transition: background .15s, border-color .15s;
transition: background .15s, border-color .15s, color .15s;
}
.lesson-nav-btn:hover { background: var(--bg-hover); border-color: var(--accent); color: var(--accent-2); text-decoration: none; }
.lesson-nav-btn.disabled { opacity: .3; pointer-events: none; }
@ -668,7 +709,6 @@ a:hover { text-decoration: underline; }
margin-left: auto;
margin-right: auto;
padding: 2rem 1.5rem;
=======
#countdown {
font-size: 1.2rem;
color: var(--color-acento);
@ -679,7 +719,6 @@ a:hover { text-decoration: underline; }
footer {
border-top: 1px solid var(--color-borde);
color: var(--color-acento);
>>>>>>> 0504d24833e730c5367d475ac407b45970029627
}
.quiz-header { margin-bottom: 2rem; text-align: center; }

View File

@ -1,54 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Agenda Espiritual AGE</title>
<link href="https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,600;1,400&family=Nunito:wght@400;600&display=swap" rel="stylesheet">
<link rel="stylesheet" href="css/bullet-journal.css">
</head>
<body>
<div class="no-print">
<header>
<h1>Bullet Jounal</h1>
</header>
<div class="toolbar">
<div class="day-nav">
<button onclick="changeDay(-1)"></button>
<span id="currentDateDisplay"></span>
<button onclick="changeDay(1)"></button>
</div>
<div class="print-actions">
<button onclick="printFullMonth('A5')">Imprimir Mes (A5)</button>
<button onclick="printPlannerA4()">Planner Corcho (A4)</button>
</div>
</div>
<section class="card daily-panel">
<h3 id="saintDisplay">Cargando santoral...</h3>
<p id="cumpleDisplay" style="color: var(--color-acento);"></p>
<div class="tracker-group">
<label><input type="checkbox" id="rosario" class="checkbox"> Rosario</label>
<label><input type="checkbox" id="vitaminas" class="checkbox"> Vitaminas/Medicina</label>
</div>
<div class="input-group">
<label>Pasos: <input type="number" id="caminar" placeholder="0"></label>
<label>Agua (vasos): <input type="number" id="agua" placeholder="0"></label>
</div>
<label>Reflexión / Notas:</label>
<textarea id="mood" placeholder="¿Cómo ha ido el día?"></textarea>
</section>
<button class="reset" onclick="resetData()">Borrar Historial</button>
</div>
<div id="printArea" class="only-print"></div>
<script src="js/bullet-journal.js"></script>
</body>
</html>

View File

@ -1,83 +0,0 @@
:root {
--color-primario: #F5F5F5;
--color-hover: #1E3A5F;
--color-fondo: #0D0D0D;
--color-texto: #E5E5E5;
--color-acento: #5FAEDB;
--color-borde: rgba(95, 174, 219, 0.3);
--color-tarjeta: rgba(20,20,20,0.85);
}
body {
margin: 0;
font-family: 'Nunito', sans-serif;
background: radial-gradient(circle at top, #111827, #0D0D0D);
color: var(--color-texto);
padding: 15px;
}
/* INTERFAZ PANTALLA */
.no-print { max-width: 600px; margin: auto; }
.toolbar { text-align: center; margin-bottom: 20px; }
.day-nav { display: flex; justify-content: center; align-items: center; gap: 20px; margin-bottom: 15px; }
button {
padding: 10px 15px;
border-radius: 12px;
border: 1px solid var(--color-borde);
background: var(--color-tarjeta);
color: white;
cursor: pointer;
transition: 0.3s;
}
button:hover { background: var(--color-hover); }
.card {
background: var(--color-tarjeta);
padding: 20px;
border-radius: 15px;
border: 1px solid var(--color-borde);
backdrop-filter: blur(10px);
}
textarea {
width: 100%; height: 150px; margin-top: 10px;
background: #111; color: white; border: 1px solid #333; border-radius: 8px; padding: 10px;
}
/* LÓGICA DE IMPRESIÓN */
.only-print { display: none; }
@media print {
.no-print { display: none !important; }
.only-print { display: block !important; }
body { background: white; color: black; }
.page-a5 {
width: 148mm; height: 210mm;
padding: 15mm;
page-break-after: always;
border-bottom: 1px dashed #ccc;
position: relative;
color: black;
}
.dots-bg {
background-image: radial-gradient(#ddd 1px, transparent 1px);
background-size: 5mm 5mm;
height: 120mm;
border: 1px solid #eee;
}
.planner-a4 {
width: 210mm; height: 297mm;
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 2px;
background: black;
}
.planner-day { background: white; height: 40mm; padding: 5px; font-size: 10px; }
}

View File

@ -1,376 +0,0 @@
@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: #F5F5F5; /* Azul noche espiritual */
--color-hover: #1E3A5F; /* Azul profundo para hover */
--color-secundario: #A1A1A1; /* Azul muy suave */
--color-fondo: #0D0D0D; /* Fondo principal */
--color-texto: #E5E5E5; /* Gris claro para texto */
--blanco-puro: #FFFFFF;
--sombra: rgba(47, 58, 86, 0.15);
--color-tarjeta: #1A1A1A;
--color-acento: #5FAEDB;
--color-borde: rgba(95, 174, 219, 0.3);
}
body {
margin: 0;
font-family: 'Nunito', sans-serif;
background: linear-gradient(180deg, #0D0D0D 0%, #111827 100%);
color: var(--color-texto);
line-height: 1.7;
-webkit-font-smoothing: antialiased;
}
header {
padding: 1.5rem 0;
text-align: center;
}
header h1 {
font-family: 'EB Garamond', serif;
letter-spacing: 1px;
color: var(--color-acento);
margin: 0;
}
#city-select {
margin-top: 12px;
padding: 8px 16px;
background: rgba(20, 20, 20, 0.8);
color: var(--color-primario);
border: 1px solid var(--color-borde);
border-radius: 8px;
font-size: 1rem;
cursor: pointer;
transition: all 0.3s ease;
}
nav ul {
list-style: none;
padding: 0;
margin: 0 auto 2rem;
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 10px;
}
nav a {
color: var(--color-primario);
border-radius: 20px;
transition: all 0.3s ease;
}
nav a:hover {
background-color: var(--color-hover);
transform: translateY(-2px);
}
.container {
width: 92%;
max-width: 1200px;
margin: auto;
padding: 2rem 0;
display: grid;
gap: 2rem;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}
.tarjeta {
background: rgba(20, 20, 20, 0.75);
backdrop-filter: blur(4px);
border-radius: 14px;
border: 1px solid var(--color-borde);
box-shadow: 0 10px 20px rgba(0,0,0,.35);
transition: all 0.3s ease;
overflow: hidden;
cursor: pointer;
}
.tarjeta:hover {
transform: translateY(-6px);
box-shadow: 0 16px 30px rgba(0,0,0,.5);
}
.tarjeta h2 {
margin: 0;
padding: 12px;
font-family: 'EB Garamond', serif;
font-size: 1.3rem;
text-align: center;
color: var(--color-acento);
background: rgba(13, 13, 13, 0.8);
border-bottom: 1px solid rgba(255,255,255,.1);
}
/* --- Párrafos generales de todas las tarjetas --- */
.tarjeta p {
text-align: center;
color: var(--color-texto);
font-size: 1rem;
margin: 2px 0; /* menos espacio entre líneas */
padding: 0; /* eliminar padding extra */
}
/* --- Ajuste para dispositivos pequeños --- */
@media (max-width: 600px) {
header h1 {
font-size: 1.6rem;
}
nav ul {
flex-direction: column;
align-items: center;
}
.container {
gap: 1.2rem;
}
}
footer {
text-align: center;
padding: 1.5rem 0;
color: var(--color-secundario);
margin-top: 3rem;
background: transparent;
}
/* --- Tarjeta Amanecer/Anochecer: más compacta --- */
#moon-mini-calendar {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 6px;
margin-top: 10px;
text-align: center;
}
.moon-day {
padding: 4px;
border-radius: 6px;
background: var(--color-fondo);
font-size: 0.9rem;
}
.moon-today {
background: var(--color-hover);
font-weight: bold;
}
.moon-icon {
font-size: 1.4rem;
display: block;
}
#moon-weekdays {
display: grid;
grid-template-columns: repeat(7, 1fr);
margin-top: 10px;
margin-bottom: 6px;
text-align: center;
font-weight: 600;
color: var(--color-acento);
font-size: 0.85rem;
}
#moon-weekdays span {
padding: 4px 0;
border-bottom: 1px solid var(--color-borde);
}
/* ---------- BULLET JOURNAL SUMMARY ---------- */
#bullet-summary {
cursor: default;
}
#bullet-summary .bj-resumen {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 10px;
padding: 14px;
}
#bullet-summary .bj-item {
background: rgba(13,13,13,0.8);
border: 1px solid var(--color-borde);
border-radius: 10px;
padding: 10px;
text-align: center;
box-shadow: inset 0 0 12px rgba(0,0,0,.4);
}
#bullet-summary .bj-item span {
display: block;
font-size: 0.75rem;
color: var(--color-secundario);
letter-spacing: .5px;
}
#bullet-summary .bj-item strong {
font-size: 1.4rem;
font-family: 'EB Garamond', serif;
color: var(--color-acento);
}
/* Botón */
#bullet-summary .btn , #weather-card .btn {
display: block;
width: 75%;
margin: 12px auto 14px;
padding: 10px;
background: linear-gradient(135deg, #1E3A5F, #111827);
color: var(--blanco-puro);
border-radius: 12px;
text-align: center;
text-decoration: none;
font-size: 0.9rem;
border: 1px solid var(--color-borde);
transition: all .3s ease;
}
#bullet-summary .btn:hover, #weather-card .btn:hover {
background: linear-gradient(135deg, #2b4f80, #1E293B);
transform: translateY(-2px);
}
/* ICONOS */
.termometro {
width: 48px;
}
.termometro.neutro {
fill: var(--color-primario);
}
.termometro.frio {
fill: var(--color-acento);
}
.termometro.calor {
fill: #f44336;
}
.termometro.templado { fill: #4caf50; }
#mes-navegacion {
display: flex;
justify-content: center;
align-items: center;
gap: 12px;
margin-top: 8px;
}
.mes-btn {
background: rgba(20, 20, 20, 0.8);
color: var(--color-acento);
border: 1px solid var(--color-borde);
border-radius: 8px;
padding: 4px 12px;
font-size: 1.2rem;
cursor: pointer;
transition: all 0.3s ease;
font-family: 'EB Garamond', serif;
}
.mes-btn:hover {
background: rgba(31, 53, 88, 0.9);
transform: translateY(-2px);
}
#mes-nombre {
font-family: 'EB Garamond', serif;
font-size: 1.2rem;
color: var(--color-acento);
min-width: 80px;
text-align: center;
}
/* =======================
Tabla de tendencia
======================= */
.trend-table {
width: 100%;
border-collapse: collapse;
margin-top: 1em;
font-family: 'Nunito', sans-serif;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
border-radius: 8px;
overflow: hidden;
}
/* Cabecera */
.trend-table thead {
color: var(--color-acento);
background-color: rgba(13, 13, 13, 0.85);
}
.trend-table thead th {
padding: 10px 15px;
text-align: center;
font-weight: 600;
}
/* Filas del cuerpo */
.trend-table tbody tr {
border-bottom: 1px solid var(--color-borde);
}
.trend-table tbody tr:nth-child(even) {
background-color: rgba(20, 20, 20, 0.8);
}
.trend-table tbody td {
padding: 8px 12px;
text-align: center;
font-weight: 500;
}
/* Colores según tipo de dato */
.trend-table tbody td:nth-child(2) { /* Máx */
color: #e74c3c; /* rojo */
font-weight: 600;
}
.trend-table tbody td:nth-child(3) { /* Mín */
color: #3498db; /* azul */
font-weight: 600;
}
.trend-table tbody td:nth-child(4) { /* Lluvia */
color: #27ae60; /* verde */
font-weight: 600;
}
/* Hover para destacar fila */
.trend-table tbody tr:hover {
background-color: rgba(31, 53, 88, 0.9);
}
/* Adaptable a móviles */
@media (max-width: 600px) {
.trend-table thead {
display: none;
}
.trend-table tbody td {
display: block;
text-align: right;
padding-left: 50%;
position: relative;
}
.trend-table tbody td::before {
content: attr(data-label);
position: absolute;
left: 10px;
font-weight: 600;
text-align: left;
}
}

View File

@ -1,12 +0,0 @@
[
{ "fecha": "01-27", "persona": "Prueba Prueba" },
{ "fecha": "02-14", "persona": "Andrea Postlbauer" },
{ "fecha": "04-08", "persona": "Tatiana Villa" },
{ "fecha": "10-14", "persona": "Jose Luis Villa" },
{ "fecha": "10-17", "persona": "Patricia Villa" },
{ "fecha": "10-19", "persona": "Mercedes Ema" },
{ "fecha": "10-24", "persona": "Arantxa Villa" },
{ "fecha": "11-24", "persona": "Nicolas Postlbauer" },
{ "fecha": "11-27", "persona": "Leo Postlbauer" }
]

View File

@ -1,368 +0,0 @@
[
{ "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

@ -1,250 +0,0 @@
@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: #F5F5F5; /* Azul noche espiritual */
--color-hover: #1E3A5F; /* Azul profundo para hover */
--color-secundario: #A1A1A1; /* Azul muy suave */
--color-fondo: #0D0D0D; /* Fondo principal */
--color-texto: #E5E5E5; /* Gris claro para texto */
--blanco-puro: #FFFFFF;
--sombra: rgba(47, 58, 86, 0.15);
--color-tarjeta: #1A1A1A;
--color-acento: #5FAEDB;
--color-borde: rgba(95, 174, 219, 0.3);
}
body {
margin: 0;
font-family: 'Nunito', sans-serif;
background: linear-gradient(180deg, #0D0D0D 0%, #111827 100%);
color: var(--color-texto);
line-height: 1.7;
-webkit-font-smoothing: antialiased;
}
header {
padding: 1.5rem 0;
text-align: center;
}
header h1 {
font-family: 'EB Garamond', serif;
letter-spacing: 1px;
color: var(--color-acento);
margin: 0;
}
nav ul {
list-style: none;
padding: 0;
margin: 0 auto 2rem;
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 10px;
}
nav a {
color: var(--color-primario);
border-radius: 20px;
transition: all 0.3s ease;
}
nav a:hover {
background-color: var(--color-hover);
transform: translateY(-2px);
}
.container {
width: 92%;
max-width: 1200px;
margin: auto;
padding: 2rem 0;
display: grid;
gap: 2rem;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}
.tarjeta {
background: rgba(20, 20, 20, 0.75);
backdrop-filter: blur(4px);
border-radius: 14px;
border: 1px solid var(--color-borde);
box-shadow: 0 10px 20px rgba(0,0,0,.35);
transition: all 0.3s ease;
overflow: hidden;
cursor: pointer;
}
.tarjeta:hover {
transform: translateY(-6px);
box-shadow: 0 16px 30px rgba(0,0,0,.5);
}
.tarjeta h2 {
margin: 0;
padding: 12px;
font-family: 'EB Garamond', serif;
font-size: 1.3rem;
text-align: center;
color: var(--color-acento);
background: rgba(13, 13, 13, 0.8);
border-bottom: 1px solid rgba(255,255,255,.1);
}
/* --- Párrafos generales de todas las tarjetas --- */
.tarjeta p {
text-align: center;
color: var(--color-texto);
font-size: 1rem;
margin: 2px 0; /* menos espacio entre líneas */
padding: 0; /* eliminar padding extra */
}
/* --- Ajuste para dispositivos pequeños --- */
@media (max-width: 600px) {
header h1 {
font-size: 1.6rem;
}
nav ul {
flex-direction: column;
align-items: center;
}
.container {
gap: 1.2rem;
}
}
footer {
text-align: center;
padding: 1.5rem 0;
color: var(--color-secundario);
margin-top: 3rem;
background: transparent;
}
/* --- Tarjeta Amanecer/Anochecer: más compacta --- */
#moon-mini-calendar {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 6px;
margin-top: 10px;
text-align: center;
}
.moon-day {
padding: 4px;
border-radius: 6px;
background: var(--color-fondo);
font-size: 0.9rem;
}
.moon-today {
background: var(--color-hover);
font-weight: bold;
}
.moon-icon {
font-size: 1.4rem;
display: block;
}
#moon-weekdays {
display: grid;
grid-template-columns: repeat(7, 1fr);
margin-top: 10px;
margin-bottom: 6px;
text-align: center;
font-weight: 600;
color: var(--color-acento);
font-size: 0.85rem;
}
#moon-weekdays span {
padding: 4px 0;
border-bottom: 1px solid var(--color-borde);
}
/* ---------- BULLET JOURNAL SUMMARY ---------- */
#bullet-summary {
cursor: default;
}
#bullet-summary .bj-resumen {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 10px;
padding: 14px;
}
#bullet-summary .bj-item {
background: rgba(13,13,13,0.8);
border: 1px solid var(--color-borde);
border-radius: 10px;
padding: 10px;
text-align: center;
box-shadow: inset 0 0 12px rgba(0,0,0,.4);
}
#bullet-summary .bj-item span {
display: block;
font-size: 0.75rem;
color: var(--color-secundario);
letter-spacing: .5px;
}
#bullet-summary .bj-item strong {
font-size: 1.4rem;
font-family: 'EB Garamond', serif;
color: var(--color-acento);
}
/* Botón */
#bullet-summary .btn , #weather-card .btn {
display: block;
width: 75%;
margin: 12px auto 14px;
padding: 10px;
background: linear-gradient(135deg, #1E3A5F, #111827);
color: var(--blanco-puro);
border-radius: 12px;
text-align: center;
text-decoration: none;
font-size: 0.9rem;
border: 1px solid var(--color-borde);
transition: all .3s ease;
}
#bullet-summary .btn:hover, #weather-card .btn:hover {
background: linear-gradient(135deg, #2b4f80, #1E293B);
transform: translateY(-2px);
}
/* ICONOS */
.termometro {
width: 48px;
}
.termometro.neutro {
fill: var(--color-primario);
}
.termometro.frio {
fill: var(--color-acento);
}
.termometro.calor {
fill: #f44336;
}
.termometro.templado { fill: #4caf50; }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,22 +0,0 @@
<svg class="termometro" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" aria-hidden="true">
<!-- cuerpo -->
<path d="M32 2
a10 10 0 0 0-10 10v26.2
a16 16 0 1 0 20 0V12
a10 10 0 0 0-10-10z
m0 4
a6 6 0 0 1 6 6v28.1
l.9.6
a12 12 0 1 1-13.8 0l.9-.6V12
a6 6 0 0 1 6-6z"></path>
<!-- mercurio -->
<rect x="30" y="18" width="4" height="18" rx="2"></rect>
<circle cx="32" cy="46" r="6"></circle>
<!-- marcas -->
<rect x="46" y="14" width="12" height="4" rx="2"></rect>
<rect x="46" y="24" width="8" height="4" rx="2"></rect>
<rect x="46" y="34" width="12" height="4" rx="2"></rect>
<rect x="46" y="44" width="8" height="4" rx="2"></rect>
</svg>

Before

Width:  |  Height:  |  Size: 765 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,73 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Estadísticas | El Tiempo</title>
<link rel="shortcut icon" href="/img/tatianalogo.png" type="image/x-icon">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/estilos.css">
</head>
<body class="app-tiempo">
<header>
<h1>Estadísticas del Tiempo</h1>
<select id="city-select">
<option value="Madrid">Madrid</option>
<option value="l'Alfàs del Pi">l'Alfàs del Pi</option>
<option value="l'Ampolla">l'Ampolla</option>
</select>
<h2 id="stats-location">Cargando datos…</h2>
<div id="mes-navegacion">
<button id="prev-month" class="mes-btn"></button>
<span id="mes-nombre">Enero</span>
<button id="next-month" class="mes-btn"></button>
</div>
</header>
<main class="container">
<!-- ÚLTIMO DATO -->
<article class="tarjeta">
<h2>Hoy</h2>
<p>Fecha: <strong id="last-date">--</strong></p>
<p>Temperatura: <strong id="last-temp">--</strong></p>
<p>Humedad: <strong id="last-humidity">--</strong></p>
<p>Lluvia: <strong id="last-rain">--</strong></p>
<p>Viento: <strong id="last-wind">--</strong></p>
<p>Amanecer: <strong id="last-sunrise">--</strong></p>
<p>Anochecer: <strong id="last-sunset">--</strong></p>
<h2>Luna</h2>
<p>Fase lunar actual: <strong id="moon-phase">Calculando...</strong></p>
<p id="moon-icon">🌑</p>
</article>
<!-- RESUMEN MES ACTUAL -->
<article class="tarjeta">
<h2>Resumen del mes actual</h2>
<p>Días registrados: <strong id="month-days">--</strong></p>
<p>Máxima absoluta: <strong id="month-max">--</strong></p>
<p>Mínima absoluta: <strong id="month-min">--</strong></p>
<p>Lluvia: <strong id="month-rain">--</strong></p>
<p>Humedad: <strong id="month-humidity">--</strong></p>
</article>
<!-- TENDENCIA HISTÓRICA -->
<article class="tarjeta">
<h2>Tendencia histórica del mes actual</h2>
<div id="trend-container">
<p>Cargando tendencia…</p>
</div>
</article>
</main>
<footer>
<p>El Tiempo &copy; <span id="year"></span> Tatiana Villa</p>
</footer>
<script src="js/estadisticas.js"></script>
</body>
</html>

View File

@ -1,135 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>El Tiempo</title>
<link rel="icon" href="img/eltiempo-logo.png" type="image/x-icon">
<link rel="stylesheet" href="css/estilos.css">
</head>
<body class="app-tiempo">
<header>
<h1>El Tiempo</h1>
<h2 id="location">Obteniendo ubicación...</h2>
<h3 id="fecha-actual">Fecha</h3>
<h3 id="santo-del-dia">Santo del dia</h3>
</header>
<main class="container">
<article class="tarjeta" id="sun-card">
<h2 id="sun-title">Amanecer y Anochecer</h2>
<p>Amanecer: <strong id="sunrise">--:--</strong></p>
<p>Anochecer: <strong id="sunset">--:--</strong></p>
<p>Duración del día: <strong id="day-length">--:--</strong></p>
<p id="countdown">Tiempo hasta anochecer: --:--:--</p>
<p id="sun-icon">☀️</p>
<hr>
<p>Fase lunar actual: <strong id="moon-phase">Calculando...</strong></p>
<p id="moon-icon">🌑</p>
</article>
<!--
<article class="tarjeta" id="moon-card">
<h2>Calendario lunar vs tiempo</h2>
<p>Fase lunar actual: <strong id="moon-phase">Calculando...</strong></p>
<p id="moon-icon">🌑</p>
<h3>Calendario lunar del mes</h3>
<div id="moon-weekdays">
<span>L</span>
<span>M</span>
<span>X</span>
<span>J</span>
<span>V</span>
<span>S</span>
<span>D</span>
</div>
<div id="moon-mini-calendar"></div>
</article>
-->
<article class="tarjeta" id="weather-card">
<h2>Tiempo Actual 🌤️</h2>
<p class="temp-linea">
<svg
class="termometro calor"
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 64 64"
width="24"
aria-hidden="true"
>
<path d="M32 2
a10 10 0 0 0-10 10v26.2
a16 16 0 1 0 20 0V12
a10 10 0 0 0-10-10z
m0 4
a6 6 0 0 1 6 6v28.1
l.9.6
a12 12 0 1 1-13.8 0l.9-.6V12
a6 6 0 0 1 6-6z"/>
<rect x="30" y="18" width="4" height="18" rx="2"/>
<circle cx="32" cy="46" r="6"/>
</svg>
<strong id="temperature">--°C</strong>
</p>
<p>Condición: <strong id="condition">--</strong></p>
<p>Humedad: <strong id="humidity">--%</strong></p>
<p>Viento: <strong id="wind">-- km/h</strong></p>
<a class="btn" href="estadisticas.html">Ver estadísticas</a>
</article>
<!--
<article class="tarjeta" id="bullet-summary">
<h2>Bullet Journal</h2>
<div class="bj-resumen">
<div class="bj-item">
<span>ROSARIO</span>
<strong id="bj-rosario">0</strong>
</div>
<div class="bj-item">
<span>CAMINAR</span>
<strong id="bj-caminar">0</strong>
</div>
<div class="bj-item">
<span>VITAMINAS</span>
<strong id="bj-vitaminas">0</strong>
</div>
<div class="bj-item">
<span>AGUA</span>
<strong id="bj-agua">0</strong>
</div>
</div>
<a class="btn" href="bullet-journal.html">Abrir Bullet Journal</a>
</article>
-->
</main>
<footer>
<p>El Tiempo &copy; <span id="year"></span> Tatiana Villa</p>
</footer>
<script src="js/codigo.js"></script>
</body>
</html>

View File

@ -1,113 +0,0 @@
let currentDate = new Date();
const fields = ['rosario', 'vitaminas', 'caminar', 'agua', 'mood'];
// Inicialización
document.addEventListener('DOMContentLoaded', () => {
setupAutoSave();
updateUI();
});
function formatDate(date) {
return date.toISOString().split('T')[0];
}
function updateUI() {
const dateString = currentDate.toLocaleDateString('es-ES', {
weekday: 'long', day: 'numeric', month: 'long', year: 'numeric'
});
document.getElementById('currentDateDisplay').innerText = dateString;
loadDayData();
updateExtras();
}
function changeDay(offset) {
currentDate.setDate(currentDate.getDate() + offset);
updateUI();
}
/* STORAGE */
function loadDayData() {
const data = JSON.parse(localStorage.getItem('journalData')) || {};
const day = data[formatDate(currentDate)] || {};
fields.forEach(f => {
const el = document.getElementById(f);
if (el.type === 'checkbox') el.checked = day[f] || false;
else el.value = day[f] || '';
});
}
function setupAutoSave() {
fields.forEach(f => {
document.getElementById(f).addEventListener('change', () => {
const data = JSON.parse(localStorage.getItem('journalData')) || {};
const key = formatDate(currentDate);
if (!data[key]) data[key] = {};
fields.forEach(field => {
const el = document.getElementById(field);
data[key][field] = el.type === 'checkbox' ? el.checked : el.value;
});
localStorage.setItem('journalData', JSON.stringify(data));
});
});
}
/* EXTRAS: SANTORAL Y CUMPLES */
async function updateExtras() {
const iso = formatDate(currentDate);
// Santoral
try {
const resS = await fetch('data/santos.json');
const santos = await resS.json();
const s = santos.find(x => x.fecha === iso);
document.getElementById('saintDisplay').innerText = s ? `Santo: ${s.santo}` : "Santoral";
document.getElementById('santodeldia').innerText = s ? `Santo del día: ${s.santo}` : "Santo del día desconocido";
} catch (e) { console.log("Falta santos.json"); }
// Cumples
try {
const resC = await fetch('data/cumples.json');
const cumples = await resC.json();
const c = cumples.find(x => x.fecha === iso.slice(5));
document.getElementById('cumpleDisplay').innerText = c ? `🎂 ${c.persona}` : "";
} catch (e) { }
}
/* IMPRESIÓN MENSUAL A5 */
async function printFullMonth() {
const data = JSON.parse(localStorage.getItem('journalData')) || {};
const month = currentDate.getMonth();
const year = currentDate.getFullYear();
const daysInMonth = new Date(year, month + 1, 0).getDate();
let html = "";
for (let i = 1; i <= daysInMonth; i++) {
const date = new Date(year, month, i);
const key = formatDate(date);
const dayData = data[key] || {};
html += `
<div class="page-a5">
<h1> ${date.toLocaleDateString('es-ES',{weekday:'long'})}, ${i} ${date.toLocaleDateString('es-ES',{month:'long'})} de ${date.getFullYear()}</h1>
<div id="santodeldia">Santo del dia</div>
<p style="margin-top:10px">
Rosario: ${dayData.rosario ? '✔' : '☐'} | Pasos: ${dayData.caminar || 0}
| Vitaminas: ${dayData.vitaminas ? '✔' : '☐'} | Agua: ${dayData.agua || 0}ml
</p>
<div class="dots-bg"></div>
</div>
`;
}
document.getElementById('printArea').innerHTML = html;
window.print();
}
function resetData() {
if(confirm("¿Seguro que quieres borrar todo el historial?")) {
localStorage.clear();
location.reload();
}
}

View File

@ -1,330 +0,0 @@
// API URL absoluta
const API_URL = "https://aplicacionesdevanguardia.es/eltiempo/servidor/weather-hoy.php?ciudad=madrid";
/* ==============================================
FUNCIONES AUXILIARES
============================================== */
function formatTime(dateString) {
const date = new Date(dateString);
return date.toLocaleTimeString("es-ES", { hour: "2-digit", minute: "2-digit" });
}
function formatDuration(seconds) {
const h = Math.floor(seconds / 3600);
const m = Math.floor((seconds % 3600) / 60);
const s = Math.floor(seconds % 60);
return `${h}h ${m}m ${s}s`;
}
function ponerlaFechaActual() {
const now = new Date();
const dateString = now.toLocaleDateString('es-ES', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' });
document.getElementById("fecha-actual").textContent = dateString;
}
/* ================================
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];
const santoDelDiaElem = document.getElementById("santo-del-dia");
try {
const res = await fetch('data/santos.json');
const listaSantos = await res.json();
const elSanto = listaSantos.find(d => d.fecha === fechaISO);
if (elSanto) {
document.getElementById("santo-del-dia").textContent = elSanto.santo;
santoDelDiaElem.textContent = elSanto.santo;
}
} catch (e) {
console.error("Error en la carga de santos:", e);
}
}
/* ==============================================
GEOLOCALIZACIÓN CENTRAL
============================================== */
async function getLocationOnce() {
return new Promise((resolve, reject) => {
if (!navigator.geolocation) reject("Geolocalización no soportada");
navigator.geolocation.getCurrentPosition(
pos => resolve({ lat: pos.coords.latitude, lon: pos.coords.longitude }),
err => reject(err.message)
);
});
}
async function getLocationName(lat, lon) {
try {
const url = `https://nominatim.openstreetmap.org/reverse?format=json&lat=${lat}&lon=${lon}`;
const res = await fetch(url);
const data = await res.json();
if (data.address) {
if (data.address.city) return data.address.city + ", " + data.address.country;
if (data.address.town) return data.address.town + ", " + data.address.country;
if (data.address.village) return data.address.village + ", " + data.address.country;
// if (data.address.hamlet) return data.address.hamlet + ", " + data.address.country;
}
return "Ubicación desconocida";
} catch {
return "Ubicación desconocida";
}
}
/* ==============================================
TARJETA AMANECER / ANOCHECER
============================================== */
async function getSunTimes(lat, lon) {
const url = `https://api.sunrise-sunset.org/json?lat=${lat}&lng=${lon}&formatted=0`;
const response = await fetch(url);
const data = await response.json();
return data.results;
}
async function updateSunCard(lat, lon) {
try {
const sun = await getSunTimes(lat, lon);
const cityName = await getLocationName(lat, lon);
const sunrise = new Date(sun.sunrise);
const sunset = new Date(sun.sunset);
document.getElementById("sunrise").textContent = formatTime(sun.sunrise);
document.getElementById("sunset").textContent = formatTime(sun.sunset);
document.getElementById("day-length").textContent = formatDuration((sunset - sunrise)/1000);
document.getElementById("location").textContent = cityName;
const card = document.getElementById("sun-card");
const sunIcon = document.getElementById("sun-icon");
function updateMode() {
const now = new Date();
if (now >= sunrise && now <= sunset) {
card.style.background = "rgba(26,26,26,0.85)";
sunIcon.textContent = "☀️";
} else {
card.style.background = "rgba(10,10,30,0.85)";
sunIcon.textContent = "🌙";
}
}
function updateCountdown() {
const now = new Date();
let target;
let text = "Queda ";
if (now < sunrise) target = sunrise;
else if (now >= sunrise && now <= sunset) target = sunset;
else target = new Date(sunrise.getTime() + 24*60*60*1000);
const diff = Math.floor((target - now) / 1000);
const durationStr = formatDuration(diff);
text += (target.getTime() === sunrise.getTime())
? durationStr + " hasta anochecer"
: durationStr + " hasta amanecer";
document.getElementById("countdown").textContent = text;
}
updateMode();
updateCountdown();
setInterval(() => { updateMode(); updateCountdown(); }, 1000);
} catch (err) {
document.getElementById("location").textContent = "Error obteniendo datos: " + err.message;
}
}
/* ==============================================
TIEMPO ACTUAL
============================================== */
async function getWeather(position) {
const lat = position.coords.latitude;
const lon = position.coords.longitude;
// Usamos 'current' para obtener datos en tiempo real
const url = `https://api.open-meteo.com/v1/forecast?latitude=${lat}&longitude=${lon}&current=temperature_2m,relative_humidity_2m,rain,precipitation,wind_speed_10m&timezone=auto`;
console.log("Fetching weather from:", url);
try {
const res = await fetch(url);
if (!res.ok) throw new Error("Error en la red");
const data = await res.json();
// La API devuelve los datos dentro de 'current'
const current = data.current;
// Inyectamos los datos en tu HTML asegurándonos de que los IDs coinciden
document.getElementById("temperature").textContent = `${current.temperature_2m}°C`;
document.getElementById("rain").textContent = `${current.rain} mm`;
document.getElementById("precipitation").textContent = `${current.precipitation} mm`;
document.getElementById("humidity").textContent = `${current.relative_humidity_2m}%`;
document.getElementById("wind").textContent = `${current.wind_speed_10m} km/h`;
} catch (err) {
console.error("Error en el tiempo:", err);
// Evitamos machacar el ID 'location' para no borrar el nombre de la ciudad
}
}
function showError(error) {
switch(error.code) {
case error.PERMISSION_DENIED:
document.getElementById("location").textContent = "Permiso denegado para obtener ubicación.";
break;
case error.POSITION_UNAVAILABLE:
document.getElementById("location").textContent = "Ubicación no disponible.";
break;
case error.TIMEOUT:
document.getElementById("location").textContent = "Tiempo de espera agotado.";
break;
default:
document.getElementById("location").textContent = "Error desconocido.";
}
}
/* ==============================================
FASES LUNARES
============================================== */
function getMoonPhase() {
const now = new Date();
const year = now.getFullYear();
const month = now.getMonth() + 1;
const day = now.getDate();
const c = Math.floor(365.25 * year);
const e = Math.floor(30.6 * (month + 1));
const jd = c + e + day - 694039.09;
const phase = (jd / 29.53) % 1;
const age = phase * 29.53;
let phaseName = "", icon = "";
if (age < 1.84566) { phaseName = "Luna Nueva"; icon = "🌑"; }
else if (age < 5.53699) { phaseName = "Creciente Iluminante"; icon = "🌒"; }
else if (age < 9.22831) { phaseName = "Cuarto Creciente"; icon = "🌓"; }
else if (age < 12.91963) { phaseName = "Gibosa Creciente"; icon = "🌔"; }
else if (age < 16.61096) { phaseName = "Luna Llena"; icon = "🌕"; }
else if (age < 20.30228) { phaseName = "Gibosa Menguante"; icon = "🌖"; }
else if (age < 23.99361) { phaseName = "Cuarto Menguante"; icon = "🌗"; }
else if (age < 27.68493) { phaseName = "Creciente Menguante"; icon = "🌘"; }
else { phaseName = "Luna Nueva"; icon = "🌑"; }
document.getElementById("moon-phase").textContent = phaseName;
document.getElementById("moon-icon").textContent = icon;
}
function moonPhaseForDate(year, month, day) {
const c = Math.floor(365.25 * year);
const e = Math.floor(30.6 * (month + 1));
const jd = c + e + day - 694039.09;
const phase = (jd / 29.53) % 1;
const age = phase * 29.53;
if (age < 1.84566) return "🌑";
if (age < 5.53699) return "🌒";
if (age < 9.22831) return "🌓";
if (age < 12.91963) return "🌔";
if (age < 16.61096) return "🌕";
if (age < 20.30228) return "🌖";
if (age < 23.99361) return "🌗";
if (age < 27.68493) return "🌘";
return "🌑";
}
function generateMiniMoonCalendar() {
const now = new Date();
const year = now.getFullYear();
const month = now.getMonth();
const today = now.getDate();
const daysInMonth = new Date(year, month + 1, 0).getDate();
// const container = document.getElementById("moon-mini-calendar");
//container.innerHTML = ".";
let firstDay = new Date(year, month, 1).getDay();
firstDay = (firstDay === 0) ? 6 : firstDay - 1;
for (let i = 0; i < firstDay; i++) {
const empty = document.createElement("div");
empty.classList.add("moon-day");
empty.style.visibility = "hidden";
// container.appendChild(empty);
}
for (let day = 1; day <= daysInMonth; day++) {
const icon = moonPhaseForDate(year, month + 1, day);
const div = document.createElement("div");
div.classList.add("moon-day");
if (day === today) div.classList.add("moon-today");
div.innerHTML = `<span>${day}</span><span class="moon-icon">${icon}</span>`;
// container.appendChild(div);
}
}
/* ==============================================
BULLET JOURNAL RESUMEN
============================================== */
function loadBulletSummary() {
const data = JSON.parse(localStorage.getItem("journalData")) || {};
const now = new Date();
const month = now.getMonth();
const year = now.getFullYear();
let rosario = 0, caminar = 0, vitaminas = 0, agua = 0;
for (let key in data) {
const d = new Date(key);
if (d.getMonth() === month && d.getFullYear() === year) {
if(data[key].rosario) rosario++;
if(data[key].caminar) caminar++;
if(data[key].vitaminas) vitaminas++;
agua += Number(data[key].agua || 0);
}
}
document.getElementById("bj-rosario").textContent = rosario;
document.getElementById("bj-caminar").textContent = caminar;
document.getElementById("bj-vitaminas").textContent = vitaminas;
document.getElementById("bj-agua").textContent = agua;
}
/* ==============================================
INICIALIZACIÓN
============================================== */
document.addEventListener("DOMContentLoaded", () => {
document.getElementById("year").innerText = new Date().getFullYear();
ponerlaFechaActual();
santoDelDia();
loadBulletSummary();
getMoonPhase();
// generateMiniMoonCalendar();
// Inicializar sol/luna + tiempo actual con una sola geolocalización
initApp();
});
async function initApp() {
try {
const { lat, lon } = await getLocationOnce();
updateSunCard(lat, lon);
getWeather({ coords: { latitude: lat, longitude: lon } });
} catch (err) {
document.getElementById("location").textContent = "Error: " + err;
}
}

View File

@ -1,255 +0,0 @@
// ====================
// Helper
// ====================
function $(id) { return document.getElementById(id); }
const monthNames = ["Enero","Febrero","Marzo","Abril","Mayo","Junio",
"Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"];
let selectedMonth = new Date().getMonth(); // mes actual
let ciudadActual = "Madrid"; // ciudad por defecto
// const BASE_API = "https://aplicacionesdevanguardia.es/eltiempo/servidor/api-weather-fechas.php";
const BASE_API = "https://tatvil.es/apis/api/weather/filter";
function buildApiUrl({ ciudad, desde, hasta }) {
const params = new URLSearchParams();
params.append("ciudad", ciudad);
params.append("desde", desde);
params.append("hasta", hasta);
console.log("Construyendo URL con parámetros:", { ciudad, desde, hasta });
console.log("URL API:", `${BASE_API}?${params.toString()}`);
return `${BASE_API}?${params.toString()}`;
}
// ====================
// Actualizar nombre de mes
// ====================
function updateMonthHeader() {
$("mes-nombre").textContent = monthNames[selectedMonth];
}
// ====================
// Cargar datos desde la API
// ====================
async function loadStats(options = {}) {
try {
const url = buildApiUrl({ ciudad: ciudadActual, ...options });
const response = await fetch(url);
if (!response.ok) throw new Error("Error cargando datos: " + response.status);
let data = await response.json(); // Cambia 'const' por 'let'
if (!data || !data.length) throw new Error("Datos vacíos");
// --- FILTRADO POR CIUDAD (Importante mientras Java no filtre) ---
data = data.filter(d => d.ciudad === ciudadActual);
// ----------------------------------------------------------------
renderLastData(data);
renderMonthStats(data);
renderTrend(data);
} catch (err) {
console.error(err);
$("stats-location").textContent = "Error cargando datos";
}
}
// ====================
// Último dato
// ====================
function renderLastData(data) {
const last = data[data.length - 1];
$("last-date").textContent = last.dia;
$("last-temp").textContent = last.temp_max + "°C / " + last.temp_min + "°C";
$("last-humidity").textContent = last.humedad + " %";
$("last-rain").textContent = last.lluvia + " mm";
$("last-wind").textContent = last.viento_velocidad + " km/h";
$("last-sunrise").textContent = last.amanecer;
$("last-sunset").textContent = last.anochecer;
$("stats-location").textContent = `Estadisticas de ${ciudadActual}`;
}
// ====================
// FASES LUNARES
// ====================
function getMoonPhase() {
const now = new Date();
const year = now.getFullYear();
const month = now.getMonth() + 1;
const day = now.getDate();
const c = Math.floor(365.25 * year);
const e = Math.floor(30.6 * (month + 1));
const jd = c + e + day - 694039.09;
const phase = (jd / 29.53) % 1;
const age = phase * 29.53;
let phaseName = "", icon = "";
if (age < 1.84566) { phaseName = "Luna Nueva"; icon = "🌑"; }
else if (age < 5.53699) { phaseName = "Creciente Iluminante"; icon = "🌒"; }
else if (age < 9.22831) { phaseName = "Cuarto Creciente"; icon = "🌓"; }
else if (age < 12.91963) { phaseName = "Gibosa Creciente"; icon = "🌔"; }
else if (age < 16.61096) { phaseName = "Luna Llena"; icon = "🌕"; }
else if (age < 20.30228) { phaseName = "Gibosa Menguante"; icon = "🌖"; }
else if (age < 23.99361) { phaseName = "Cuarto Menguante"; icon = "🌗"; }
else if (age < 27.68493) { phaseName = "Creciente Menguante"; icon = "🌘"; }
else { phaseName = "Luna Nueva"; icon = "🌑"; }
$("moon-phase").textContent = phaseName;
$("moon-icon").textContent = icon;
const today = new Date();
$("stats-location").textContent += ` | Hoy ${today.getDate()} de ${monthNames[today.getMonth()]} de ${today.getFullYear()}`;
}
// ====================
// Estadísticas del mes seleccionado
// ====================
function renderMonthStats(data) {
// Esta es la clave: filtrar por el mes seleccionado antes de calcular
const monthData = data.filter(d => {
const fechaDato = new Date(d.dia);
return fechaDato.getMonth() === selectedMonth;
});
if (!monthData.length) {
// Si no hay datos, ponemos a cero para que no salgan cosas raras
$("month-days").textContent = 0;
return;
}
const maxTemps = monthData.map(d => d.temp_max);
const minTemps = monthData.map(d => d.temp_min);
const lluvia = monthData.reduce((sum, d) => sum + parseFloat(d.lluvia), 0);
const humedad = (monthData.reduce((sum, d) => sum + parseFloat(d.humedad), 0) / monthData.length).toFixed(1);
const lluviamedia = lluvia/monthData.length; // media de lluvia diaria
$("month-days").textContent = monthData.length;
$("month-max").textContent = Math.max(...maxTemps) + "°C";
$("month-min").textContent = Math.min(...minTemps) + "°C";
$("month-rain").textContent = lluvia.toFixed(1) + " mm (total) / " + lluviamedia.toFixed(1) + " mm (media diaria)";
$("month-humidity").textContent = humedad + " % (media diaria)";
}
// ====================
// Tendencia histórica
// ====================
function renderTrend(data) {
const byYear = {};
console.log("Datos recibidos para tendencia histórica:", data);
// Agrupar datos por año para el mes seleccionado
data.forEach(d => {
const date = new Date(d.dia);
if (date.getMonth() === selectedMonth) {
const year = date.getFullYear();
if (!byYear[year]) byYear[year] = { max: [], min: [], rain: [] };
byYear[year].max.push(d.temp_max);
byYear[year].min.push(d.temp_min);
byYear[year].rain.push(parseFloat(d.lluvia));
}
});
const container = $("trend-container");
console.log("Datos agrupados por año para tendencia:", byYear);
if (Object.keys(byYear).length === 0) {
container.innerHTML = "<p>No hay datos históricos para este mes.</p>";
return;
}
let html = "<table class=\"trend-table\"><thead><tr><th>Año</th><th>Máx</th><th>Mín</th><th>Lluvia</th></tr></thead><tbody>";
Object.keys(byYear).sort((a, b) => b - a).forEach(year => {
const maxAvg = (byYear[year].max.reduce((a,b)=>a+b,0)/byYear[year].max.length).toFixed(1);
const minAvg = (byYear[year].min.reduce((a,b)=>a+b,0)/byYear[year].min.length).toFixed(1);
const rainTotal = byYear[year].rain.reduce((a,b)=>a+b,0).toFixed(1);
html += `
<tr>
<td><strong>${year}</strong></td>
<td>${maxAvg}°C</td>
<td>${minAvg}°C</td>
<td>${rainTotal} mm</td>
</tr>
`;
});
html += "</tbody></table>";
container.innerHTML = html;
}
// ====================
// Cargar mes actual según selectedMonth
// ====================
function loadCurrentMonth() {
const ahora = new Date();
const yearActual = ahora.getFullYear();
const mesActual = ahora.getMonth();
const diaActual = ahora.getDate();
// El mes que queremos consultar
const yearBusqueda = yearActual;
const monthBusqueda = selectedMonth + 1;
// 1. Primer día del mes (Siempre el 01)
const firstDay = `${yearBusqueda}-${String(monthBusqueda).padStart(2, "0")}-01`;
// 2. Calculamos el último día teórico del mes
let ultimoDiaObj = new Date(yearBusqueda, monthBusqueda, 0);
// 3. VALIDACIÓN CRUCIAL: Si el mes seleccionado es el actual,
// limitamos la búsqueda hasta HOY para evitar el Error 500 del servidor.
if (selectedMonth === mesActual && yearBusqueda === yearActual) {
ultimoDiaObj = ahora;
}
// 4. Formateo manual YYYY-MM-DD (Evita toISOString y sus desfases UTC)
const y = ultimoDiaObj.getFullYear();
const m = String(ultimoDiaObj.getMonth() + 1).padStart(2, "0");
const d = String(ultimoDiaObj.getDate()).padStart(2, "0");
const lastDay = `${y}-${m}-${d}`;
console.log(`Petición: ${firstDay} hasta ${lastDay}`);
loadStats({ desde: firstDay, hasta: lastDay });
}
// ====================
// Inicialización
// ====================
document.addEventListener("DOMContentLoaded", () => {
updateMonthHeader();
getMoonPhase();
loadCurrentMonth();
$("prev-month").addEventListener("click", () => {
selectedMonth = (selectedMonth + 11) % 12;
updateMonthHeader();
loadCurrentMonth();
});
$("next-month").addEventListener("click", () => {
selectedMonth = (selectedMonth + 1) % 12;
updateMonthHeader();
loadCurrentMonth();
});
$("year").textContent = new Date().getFullYear();
// ====================
// Selector de ciudad
// ====================
$("city-select").addEventListener("change", (e) => {
ciudadActual = e.target.value;
loadCurrentMonth();
});
});

View File

@ -1,148 +0,0 @@
const API_URL = "http://aplicacionesdevanguardia.es/eltiempo/apis/api-weather-reverse.php?ciudad=madrid";
/* ---------- UTILIDADES ---------- */
function $(id) {
return document.getElementById(id);
}
function monthName(monthIndex) {
return new Date(2026, monthIndex, 1)
.toLocaleDateString("es-ES", { month: "long" });
}
/* ---------- CARGA PRINCIPAL ---------- */
async function loadStats() {
try {
const res = await fetch(API_URL);
const data = await res.json();
if (!data || !data.length) throw "Sin datos";
renderLastDay(data[0]);
renderMonthStats(data);
renderTrend(data);
$("stats-location").textContent = "Madrid (datos históricos)";
} catch (e) {
$("stats-location").textContent = "Error cargando estadísticas";
console.error(e);
}
}
/* ---------- ÚLTIMO DÍA ---------- */
function renderLastDay(day) {
$("last-date").textContent = day.dia;
$("last-temp").textContent = `${day.temp_min}°C / ${day.temp_max}°C`;
$("last-humidity").textContent = `${Math.round(day.humedad)} %`;
$("last-rain").textContent = `${day.lluvia} mm`;
$("last-wind").textContent = `${Math.round(day.viento_velocidad)} km/h`;
$("last-sunrise").textContent = day.amanecer;
$("last-sunset").textContent = day.anochecer;
}
/* ---------- RESUMEN DEL MES ---------- */
function renderMonthStats(data) {
const now = new Date();
const month = now.getMonth();
const year = now.getFullYear();
const monthData = data.filter(d => {
const date = new Date(d.dia);
return date.getMonth() === month && date.getFullYear() === year;
});
if (!monthData.length) return;
const maxTemps = monthData.map(d => d.temp_max);
const minTemps = monthData.map(d => d.temp_min);
const lluvia = monthData.reduce(
(sum, d) => sum + parseFloat(d.lluvia), 0
);
const humedad = (
monthData.reduce((sum, d) => sum + parseFloat(d.humedad), 0)
/ monthData.length
).toFixed(1);
$("month-days").textContent = monthData.length;
$("month-max").textContent = Math.max(...maxTemps) + "°C";
$("month-min").textContent = Math.min(...minTemps) + "°C";
$("month-rain").textContent = lluvia.toFixed(1) + " mm";
$("month-humidity").textContent = humedad + " %";
}
/* ---------- TENDENCIA HISTÓRICA ---------- */
function renderTrend(data) {
const now = new Date();
const month = now.getMonth();
const byYear = {};
data.forEach(d => {
const date = new Date(d.dia);
if (date.getMonth() === month) {
const year = date.getFullYear();
if (!byYear[year]) {
byYear[year] = { max: [], min: [], rain: [] };
}
byYear[year].max.push(d.temp_max);
byYear[year].min.push(d.temp_min);
byYear[year].rain.push(parseFloat(d.lluvia));
}
});
const container = $("trend-container");
container.innerHTML = "";
Object.keys(byYear)
.sort()
.forEach(year => {
const maxAvg = (
byYear[year].max.reduce((a,b)=>a+b,0) /
byYear[year].max.length
).toFixed(1);
const minAvg = (
byYear[year].min.reduce((a,b)=>a+b,0) /
byYear[year].min.length
).toFixed(1);
const rainTotal = (
byYear[year].rain.reduce((a,b)=>a+b,0)
).toFixed(1);
container.innerHTML += `
<p>
<strong>${year}</strong>
Máx ${maxAvg}°C ·
Mín ${minAvg}°C ·
Lluvia ${rainTotal} mm
</p>
`;
});
}
/* ---------- INIT ---------- */
document.addEventListener("DOMContentLoaded", () => {
$("year").textContent = new Date().getFullYear();
loadStats();
});

View File

@ -1,251 +0,0 @@
// ====================
// Helper
// ====================
function $(id) { return document.getElementById(id); }
const monthNames = ["Enero","Febrero","Marzo","Abril","Mayo","Junio",
"Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"];
let selectedMonth = new Date().getMonth(); // mes actual
let ciudadActual = "Madrid"; // ciudad por defecto
const BASE_API = "https://aplicacionesdevanguardia.es/eltiempo/servidor/api-weather-fechas.php";
// ====================
// Construir URL de API según filtros
// ====================
function buildApiUrl({ ciudad, fecha = null, desde = null, hasta = null }) {
const params = new URLSearchParams();
params.append("ciudad", ciudad);
if (fecha) params.append("fecha", fecha);
if (desde) params.append("desde", desde);
if (hasta) params.append("hasta", hasta);
console.log("24 - Construyendo URL con parámetros:", { ciudad, fecha, desde, hasta });
console.log("URL API:", `${BASE_API}?${params.toString()}`);
return `${BASE_API}?${params.toString()}`;
}
// ====================
// Actualizar nombre de mes
// ====================
function updateMonthHeader() {
$("mes-nombre").textContent = monthNames[selectedMonth];
}
// ====================
// Cargar datos desde la API
// ====================
async function loadStats(options = {}) {
try {
const url = buildApiUrl({
ciudad: ciudadActual,
...options
});
const response = await fetch(url);
if (!response.ok) throw new Error("Error cargando datos: " + response.status);
const data = await response.json();
if (!data || !data.length) throw new Error("Datos vacíos");
renderLastData(data);
renderMonthStats(data);
renderTrend(data);
} catch (err) {
console.error(err);
$("stats-location").textContent = "Error cargando datos";
}
}
// ====================
// Último dato
// ====================
function renderLastData(data) {
const last = data[data.length - 1];
$("last-date").textContent = last.dia;
$("last-temp").textContent = last.temp_max + "°C / " + last.temp_min + "°C";
$("last-humidity").textContent = last.humedad + " %";
$("last-rain").textContent = last.lluvia + " mm";
$("last-wind").textContent = last.viento_velocidad + " km/h";
$("last-sunrise").textContent = last.amanecer;
$("last-sunset").textContent = last.anochecer;
$("stats-location").textContent = `Estadisticas de ${ciudadActual}`;
}
// ====================
// FASES LUNARES
// ====================
function getMoonPhase() {
const now = new Date();
const year = now.getFullYear();
const month = now.getMonth() + 1;
const day = now.getDate();
const c = Math.floor(365.25 * year);
const e = Math.floor(30.6 * (month + 1));
const jd = c + e + day - 694039.09;
const phase = (jd / 29.53) % 1;
const age = phase * 29.53;
let phaseName = "", icon = "";
if (age < 1.84566) { phaseName = "Luna Nueva"; icon = "🌑"; }
else if (age < 5.53699) { phaseName = "Creciente Iluminante"; icon = "🌒"; }
else if (age < 9.22831) { phaseName = "Cuarto Creciente"; icon = "🌓"; }
else if (age < 12.91963) { phaseName = "Gibosa Creciente"; icon = "🌔"; }
else if (age < 16.61096) { phaseName = "Luna Llena"; icon = "🌕"; }
else if (age < 20.30228) { phaseName = "Gibosa Menguante"; icon = "🌖"; }
else if (age < 23.99361) { phaseName = "Cuarto Menguante"; icon = "🌗"; }
else if (age < 27.68493) { phaseName = "Creciente Menguante"; icon = "🌘"; }
else { phaseName = "Luna Nueva"; icon = "🌑"; }
$("moon-phase").textContent = phaseName;
$("moon-icon").textContent = icon;
const today = new Date();
$("stats-location").textContent += ` | Hoy ${today.getDate()} de ${monthNames[today.getMonth()]} de ${today.getFullYear()}`;
}
// ====================
// Estadísticas del mes seleccionado
// ====================
function renderMonthStats(data) {
const monthData = data.filter(d => new Date(d.dia).getMonth() === selectedMonth);
if (!monthData.length) return;
const maxTemps = monthData.map(d => d.temp_max);
const minTemps = monthData.map(d => d.temp_min);
const lluvia = monthData.reduce((sum, d) => sum + parseFloat(d.lluvia), 0);
const humedad = (monthData.reduce((sum, d) => sum + parseFloat(d.humedad), 0) / monthData.length).toFixed(1);
const lluviamedia = lluvia/monthData.length; // media de lluvia diaria
$("month-days").textContent = monthData.length;
$("month-max").textContent = Math.max(...maxTemps) + "°C";
$("month-min").textContent = Math.min(...minTemps) + "°C";
$("month-rain").textContent = lluvia.toFixed(1) + " mm (total) / " + lluviamedia.toFixed(1) + " mm (media diaria)";
$("month-humidity").textContent = humedad + " % (media diaria)";
}
// ====================
// Tendencia histórica
// ====================
function renderTrend(data) {
const byYear = {};
console.log("Datos recibidos para tendencia histórica:", data);
// Agrupar datos por año para el mes seleccionado
data.forEach(d => {
const date = new Date(d.dia);
if (date.getMonth() === selectedMonth) {
const year = date.getFullYear();
if (!byYear[year]) byYear[year] = { max: [], min: [], rain: [] };
byYear[year].max.push(d.temp_max);
byYear[year].min.push(d.temp_min);
byYear[year].rain.push(parseFloat(d.lluvia));
}
});
const container = $("trend-container");
console.log("Datos agrupados por año para tendencia:", byYear);
if (Object.keys(byYear).length === 0) {
container.innerHTML = "<p>No hay datos históricos para este mes.</p>";
return;
}
let html = "<table class=\"trend-table\"><thead><tr><th>Año</th><th>Máx</th><th>Mín</th><th>Lluvia</th></tr></thead><tbody>";
Object.keys(byYear).sort((a, b) => b - a).forEach(year => {
const maxAvg = (byYear[year].max.reduce((a,b)=>a+b,0)/byYear[year].max.length).toFixed(1);
const minAvg = (byYear[year].min.reduce((a,b)=>a+b,0)/byYear[year].min.length).toFixed(1);
const rainTotal = byYear[year].rain.reduce((a,b)=>a+b,0).toFixed(1);
html += `
<tr>
<td><strong>${year}</strong></td>
<td>${maxAvg}°C</td>
<td>${minAvg}°C</td>
<td>${rainTotal} mm</td>
</tr>
`;
});
html += "</tbody></table>";
container.innerHTML = html;
}
// ====================
// Cargar mes actual según selectedMonth
// ====================
function loadCurrentMonth() {
const ahora = new Date();
const yearActual = ahora.getFullYear();
const mesActual = ahora.getMonth();
const diaActual = ahora.getDate();
// El mes que queremos consultar
const yearBusqueda = yearActual;
const monthBusqueda = selectedMonth + 1;
// 1. Primer día del mes (Siempre el 01)
const firstDay = `${yearBusqueda}-${String(monthBusqueda).padStart(2, "0")}-01`;
// 2. Calculamos el último día teórico del mes
let ultimoDiaObj = new Date(yearBusqueda, monthBusqueda, 0);
// 3. VALIDACIÓN CRUCIAL: Si el mes seleccionado es el actual,
// limitamos la búsqueda hasta HOY para evitar el Error 500 del servidor.
if (selectedMonth === mesActual && yearBusqueda === yearActual) {
ultimoDiaObj = ahora;
}
// 4. Formateo manual YYYY-MM-DD (Evita toISOString y sus desfases UTC)
const y = ultimoDiaObj.getFullYear();
const m = String(ultimoDiaObj.getMonth() + 1).padStart(2, "0");
const d = String(ultimoDiaObj.getDate()).padStart(2, "0");
const lastDay = `${y}-${m}-${d}`;
console.log(`Petición: ${firstDay} hasta ${lastDay}`);
loadStats({ desde: firstDay, hasta: lastDay });
}
// ====================
// Inicialización
// ====================
document.addEventListener("DOMContentLoaded", () => {
updateMonthHeader();
getMoonPhase();
loadCurrentMonth();
$("prev-month").addEventListener("click", () => {
selectedMonth = (selectedMonth + 11) % 12;
updateMonthHeader();
loadCurrentMonth();
});
$("next-month").addEventListener("click", () => {
selectedMonth = (selectedMonth + 1) % 12;
updateMonthHeader();
loadCurrentMonth();
});
$("year").textContent = new Date().getFullYear();
// ====================
// Selector de ciudad
// ====================
$("city-select").addEventListener("change", (e) => {
ciudadActual = e.target.value;
loadCurrentMonth();
});
});

View File

@ -1,150 +0,0 @@
<?php
// ============================
// 1. HEADERS
// ============================
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=utf-8");
// ============================
// 2. CONFIGURACIÓN BD
// (En producción esto debería ir
// en un archivo fuera del webroot)
// ============================
define('DB_HOST', 'localhost');
define('DB_USER', 'admin');
define('DB_PASS', 'Eavne,e1m');
define('DB_NAME', 'clima');
// ============================
// 3. VALIDACIÓN DE ENTRADA
// ============================
$ciudad = $_GET['ciudad'] ?? '';
$fecha = $_GET['fecha'] ?? '';
$desde = $_GET['desde'] ?? '';
$hasta = $_GET['hasta'] ?? '';
if (empty($ciudad)) {
http_response_code(400);
echo json_encode(["error" => "El parámetro 'ciudad' es obligatorio."]);
exit();
}
// Validar formato fecha YYYY-MM-DD
function fechaValida($fecha) {
return preg_match('/^\d{4}-\d{2}-\d{2}$/', $fecha);
}
if (!empty($fecha) && !fechaValida($fecha)) {
http_response_code(400);
echo json_encode(["error" => "El parámetro 'fecha' debe tener formato YYYY-MM-DD."]);
exit();
}
if (!empty($desde) && !fechaValida($desde)) {
http_response_code(400);
echo json_encode(["error" => "El parámetro 'desde' debe tener formato YYYY-MM-DD."]);
exit();
}
if (!empty($hasta) && !fechaValida($hasta)) {
http_response_code(400);
echo json_encode(["error" => "El parámetro 'hasta' debe tener formato YYYY-MM-DD."]);
exit();
}
// ============================
// 4. CONEXIÓN BD
// ============================
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if ($conn->connect_error) {
http_response_code(500);
echo json_encode(["error" => "Error de conexión a la base de datos."]);
exit();
}
// ============================
// 5. CONSTRUIR QUERY DINÁMICA
// ============================
$sql = "
SELECT
DATE(fecha) AS dia,
MIN(fecha) AS primera_fecha_del_dia,
MIN(amanecer) AS amanecer,
MAX(anochecer) AS anochecer,
MAX(temp_max) AS temp_max,
MIN(temp_min) AS temp_min,
AVG(humedad) AS humedad,
SUM(lluvia) AS lluvia,
AVG(nubes) AS nubes,
AVG(viento_velocidad) AS viento_velocidad,
AVG(viento_direccion) AS viento_direccion
FROM weather
WHERE ciudad LIKE CONCAT('%', ?, '%')
";
$params = [$ciudad];
$types = "s";
// Filtro por fecha exacta
if (!empty($fecha)) {
$sql .= " AND DATE(fecha) = ?";
$params[] = $fecha;
$types .= "s";
}
// Filtro por rango
if (!empty($desde) && !empty($hasta)) {
$sql .= " AND DATE(fecha) BETWEEN ? AND ?";
$params[] = $desde;
$params[] = $hasta;
$types .= "ss";
} elseif (!empty($desde)) {
$sql .= " AND DATE(fecha) >= ?";
$params[] = $desde;
$types .= "s";
} elseif (!empty($hasta)) {
$sql .= " AND DATE(fecha) <= ?";
$params[] = $hasta;
$types .= "s";
}
$sql .= "
GROUP BY DATE(fecha)
ORDER BY DATE(fecha);
";
// ============================
// 6. PREPARAR Y EJECUTAR
// ============================
$stmt = $conn->prepare($sql);
if (!$stmt) {
http_response_code(500);
echo json_encode(["error" => "Error al preparar la consulta."]);
$conn->close();
exit();
}
$stmt->bind_param($types, ...$params);
$stmt->execute();
$result = $stmt->get_result();
$datos = [];
while ($row = $result->fetch_assoc()) {
$datos[] = $row;
}
// ============================
// 7. RESPUESTA
// ============================
http_response_code(200);
echo json_encode($datos);
// ============================
// 8. CIERRE
// ============================
$stmt->close();
$conn->close();
?>

View File

@ -1,153 +0,0 @@
<?php
// ============================
// 1. HEADERS
// ============================
header("Access-Control-Allow-Origin: *");
header("Content-Type: text/plain; charset=utf-8");
// ============================
// 2. CONFIGURACIÓN BD
// (En producción esto debería ir
// en un archivo fuera del webroot)
// ============================
define('DB_HOST', 'localhost');
define('DB_USER', 'admin');
define('DB_PASS', 'Eavne,e1m');
define('DB_NAME', 'clima');
// ============================
// 3. VALIDACIÓN DE ENTRADA
// ============================
$ciudad = $_GET['ciudad'] ?? '';
$fecha = $_GET['fecha'] ?? '';
$desde = $_GET['desde'] ?? '';
$hasta = $_GET['hasta'] ?? '';
if (empty($ciudad)) {
http_response_code(400);
echo json_encode(["error" => "El parámetro 'ciudad' es obligatorio."]);
exit();
}
// Validar formato fecha YYYY-MM-DD
function fechaValida($fecha) {
return preg_match('/^\d{4}-\d{2}-\d{2}$/', $fecha);
}
if (!empty($fecha) && !fechaValida($fecha)) {
http_response_code(400);
echo ["error" => "El parámetro 'fecha' debe tener formato YYYY-MM-DD."];
exit();
}
if (!empty($desde) && !fechaValida($desde)) {
http_response_code(400);
echo ["error" => "El parámetro 'desde' debe tener formato YYYY-MM-DD."];
exit();
}
if (!empty($hasta) && !fechaValida($hasta)) {
http_response_code(400);
echo ["error" => "El parámetro 'hasta' debe tener formato YYYY-MM-DD."];
exit();
}
// ============================
// 4. CONEXIÓN BD
// ============================
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if ($conn->connect_error) {
http_response_code(500);
echo ["error" => "Error de conexión a la base de datos."];
exit();
}
// ============================
// 5. CONSTRUIR QUERY DINÁMICA
// ============================
$sql = "
SELECT
DATE(fecha) AS dia,
MIN(fecha) AS primera_fecha_del_dia,
MIN(amanecer) AS amanecer,
MAX(anochecer) AS anochecer,
MAX(temp_max) AS temp_max,
MIN(temp_min) AS temp_min,
AVG(humedad) AS humedad,
SUM(lluvia) AS lluvia,
AVG(nubes) AS nubes,
AVG(viento_velocidad) AS viento_velocidad,
AVG(viento_direccion) AS viento_direccion
FROM weather
WHERE ciudad LIKE CONCAT('%', ?, '%')
";
$params = [$ciudad];
$types = "s";
// Filtro por fecha exacta
if (!empty($fecha)) {
$sql .= " AND DATE(fecha) = ?";
$params[] = $fecha;
$types .= "s";
}
// Filtro por rango
if (!empty($desde) && !empty($hasta)) {
$sql .= " AND DATE(fecha) BETWEEN ? AND ?";
$params[] = $desde;
$params[] = $hasta;
$types .= "ss";
} elseif (!empty($desde)) {
$sql .= " AND DATE(fecha) >= ?";
$params[] = $desde;
$types .= "s";
} elseif (!empty($hasta)) {
$sql .= " AND DATE(fecha) <= ?";
$params[] = $hasta;
$types .= "s";
}
$sql .= "
GROUP BY DATE(fecha)
ORDER BY DATE(fecha);
";
echo $sql; // Para depuración: muestra la consulta generada
echo "\nParámetros: " . implode(", ", $params) . "\n"; // Para depuración: muestra los parámetros
// ============================
// 6. PREPARAR Y EJECUTAR
// ============================
$stmt = $conn->prepare($sql);
if (!$stmt) {
http_response_code(500);
// echo json_encode(["error" => "Error al preparar la consulta."]);
$conn->close();
exit();
}
$stmt->bind_param($types, ...$params);
$stmt->execute();
$result = $stmt->get_result();
$datos = [];
while ($row = $result->fetch_assoc()) {
// $datos[] = $row;
echo $row['dia'] . " - " . $row['temp_max'] . "°C / " . $row['temp_min'] . "°C\n";
}
// ============================
// 7. RESPUESTA
// ============================
//http_response_code(200);
//echo json_encode($datos);
// ============================
// 8. CIERRE
// ============================
$stmt->close();
$conn->close();
?>

View File

@ -1,87 +0,0 @@
<?php
// Permitir solicitudes desde cualquier origen (CORS)
header("Access-Control-Allow-Origin: *");
header('Content-Type: application/json; charset=utf-8');
// --- 1. Database Configuration (Example with external config) ---
// In a real scenario, this would come from a file outside the web root.
// For demonstration, let's just make it clear that this should be external.
define('DB_HOST', 'localhost');
define('DB_USER', 'admin');
define('DB_PASS', 'Eavne,e1m'); // !! IMPORTANT: Store this securely in a real application !!
define('DB_NAME', 'clima');
// --- 2. Input Validation ---
// Assuming 'ciudad' comes from a GET request.
$ciudad = $_GET['ciudad'] ?? ''; // Use null coalescing operator for cleaner default
if (empty($ciudad)) {
http_response_code(400); // Bad Request
echo json_encode(["error" => "Parámetro 'ciudad' es requerido."]);
exit(); // Stop script execution
}
// Optional: Further sanitize/validate the city name if needed (e.g., alphanumeric only)
// if (!preg_match('/^[a-zA-Z\s]+$/', $ciudad)) {
// http_response_code(400);
// echo json_encode(["error" => "El nombre de la ciudad contiene caracteres inválidos."]);
// exit();
// }
// --- 3. Database Connection ---
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if ($conn->connect_error) {
http_response_code(500); // Internal Server Error
echo json_encode(["error" => "Error de conexión a la base de datos: " . $conn->connect_error]);
exit();
}
// --- 4. Prepare and Execute Query ---
$stmt = $conn->prepare("
SELECT DATE(fecha) AS dia,
MIN(fecha) AS primera_fecha_del_dia,
MIN(amanecer) AS amanecer,
MAX(anochecer) AS anochecer,
MAX(temp_max) AS temp_max,
MIN(temp_min) AS temp_min,
AVG(humedad) AS humedad,
AVG(lluvia) AS lluvia,
AVG(nubes) AS nubes,
AVG(viento_velocidad) AS viento_velocidad,
AVG(viento_direccion) AS viento_direccion
FROM weather
WHERE DATE(fecha) >= '2024-10-01'
AND ciudad LIKE CONCAT('%', ?, '%')
GROUP BY DATE(fecha)
ORDER BY DATE(fecha) DESC
");
if (!$stmt) {
http_response_code(500); // Internal Server Error
echo json_encode(["error" => "Error al preparar la consulta: " . $conn->error]);
$conn->close();
exit();
}
$stmt->bind_param("s", $ciudad);
$stmt->execute();
$result = $stmt->get_result();
$datos = [];
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$datos[] = $row;
}
http_response_code(200); // OK
echo json_encode($datos);
} else {
http_response_code(200);
echo json_encode([]); // array vacío
}
// --- 5. Close Resources ---
$stmt->close();
$conn->close();
?>

View File

@ -1,96 +0,0 @@
<?php
// Permitir solicitudes desde cualquier origen (CORS)
header("Access-Control-Allow-Origin: *");
header('Content-Type: application/json; charset=utf-8');
// --- 1. Database Configuration (Example with external config) ---
// In a real scenario, this would come from a file outside the web root.
// For demonstration, let's just make it clear that this should be external.
define('DB_HOST', 'localhost');
define('DB_USER', 'admin');
define('DB_PASS', 'Eavne,e1m'); // !! IMPORTANT: Store this securely in a real application !!
define('DB_NAME', 'clima');
// --- 2. Input Validation ---
// Assuming 'ciudad' comes from a GET request.
$ciudad = $_GET['ciudad'] ?? ''; // Use null coalescing operator for cleaner default
$fecha = $_GET['fecha'] ?? ''; // Optional: filter by date
if (empty($ciudad)) {
http_response_code(400); // Bad Request
echo json_encode(["error" => "Parámetro 'ciudad' es requerido."]);
exit(); // Stop script execution
}
if (!empty($fecha) && !preg_match('/^\d{4}-\d{2}-\d{2}$/', $fecha)) {
http_response_code(400); // Bad Request
echo json_encode(["error" => "Parámetro 'fecha' debe tener el formato YYYY-MM-DD."]);
exit();
}
// Optional: Further sanitize/validate the city name if needed (e.g., alphanumeric only)
// if (!preg_match('/^[a-zA-Z\s]+$/', $ciudad)) {
// http_response_code(400);
// echo json_encode(["error" => "El nombre de la ciudad contiene caracteres inválidos."]);
// exit();
// }
// --- 3. Database Connection ---
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if ($conn->connect_error) {
http_response_code(500); // Internal Server Error
echo json_encode(["error" => "Error de conexión a la base de datos: " . $conn->connect_error]);
exit();
}
// --- 4. Prepare and Execute Query ---
$stmt = $conn->prepare("
SELECT DATE(fecha) AS dia,
MIN(fecha) AS primera_fecha_del_dia,
MIN(amanecer) AS amanecer,
MAX(anochecer) AS anochecer,
MAX(temp_max) AS temp_max,
MIN(temp_min) AS temp_min,
AVG(humedad) AS humedad,
SUM(lluvia) AS lluvia,
AVG(nubes) AS nubes,
AVG(viento_velocidad) AS viento_velocidad,
AVG(viento_direccion) AS viento_direccion
FROM weather
WHERE DATE(fecha) >= '2024-10-01'
AND ciudad LIKE CONCAT('%', ?, '%')
AND DATE(fecha) LIKE CONCAT('%', ?, '%')
GROUP BY DATE(fecha)
ORDER BY DATE(fecha);
");
if (!$stmt) {
http_response_code(500); // Internal Server Error
echo json_encode(["error" => "Error al preparar la consulta: " . $conn->error]);
$conn->close();
exit();
}
$stmt->bind_param("ss", $ciudad, $fecha);
$stmt->execute();
$result = $stmt->get_result();
$datos = [];
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$datos[] = $row;
}
http_response_code(200); // OK
echo json_encode($datos);
} else {
http_response_code(200);
echo json_encode([]); // array vacío
}
// --- 5. Close Resources ---
$stmt->close();
$conn->close();
?>

View File

@ -1,41 +0,0 @@
<?php
// Permitir solicitudes desde cualquier origen (CORS)
header("Access-Control-Allow-Origin: *");
header('Content-Type: application/json; charset=utf-8');
// --- 1. Database Configuration (Example with external config) ---
// In a real scenario, this would come from a file outside the web root.
// For demonstration, let's just make it clear that this should be external.
define('DB_HOST', 'localhost');
define('DB_USER', 'admin');
define('DB_PASS', 'Eavne,e1m'); // !! IMPORTANT: Store this securely in a real application !!
define('DB_NAME', 'clima');
// Crear conexión
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
// Verificar conexión
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$ciudad = $_GET['ciudad'] ?? '';
$hoy = date("Y-m-d");
$sql = "SELECT amanecer, anochecer, MIN(temp_min), MAX(temp_max), MAX(viento_velocidad), AVG(viento_direccion), MAX(nubes), MAX(lluvia)
FROM weather
WHERE fecha LIKE '%" . $hoy . "%' AND ciudad LIKE '%" . $ciudad . "%'";
$result = $conn->query($sql);
$data = array();
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$data[] = $row;
}
echo json_encode($data);
} else {
echo json_encode(array("message" => "No data found"));
}
$conn->close();
?>

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -1,14 +0,0 @@
SELECT
DATE(fecha) AS dia,
MAX(temp_max) AS temp_max,
MIN(temp_min) AS temp_min,
AVG(humedad) AS humedad,
SUM(lluvia) AS lluvia,
AVG(nubes) AS nubes,
AVG(viento_velocidad) AS viento_velocidad,
AVG(viento_direccion) AS viento_direccion
FROM weather
WHERE ciudad LIKE CONCAT('%', 'madrid', '%')
AND DATE(fecha) BETWEEN '2026-02-01' AND '2026-02-17'
GROUP BY DATE(fecha)
ORDER BY DATE(fecha);

61
f1.html
View File

@ -1,61 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>F1 Stats Pro - Panel de Control</title>
<link rel="stylesheet" href="css/f1.css">
</head>
<body>
<header>
<h1>Estadísticas F1</h1>
</header>
<section class="stat-card cuenta-atras">
<h3 > Cuenta atrás para el GP de Australia 2026</h3>
<div id="countdown">
00d 00h 00m 00s
</div>
</section>
<main class="dashboard">
<section class="stat-card">
<h3 id="session-info">Pilotos</h3>
<table id="pilotos-table">
<thead>
<tr>
<th>#</th>
<th>Nombre</th>
<th>Apellido</th>
<th>Equipo</th>
<th>Nacionalidad</th>
<th>Código</th>
</tr>
</thead>
<tbody>
<!-- Aquí se llenarán los pilotos -->
</tbody>
</table>
</section>
<section class="stat-card">
<h3 id="session-info">Equipos</h3>
<table id="equipos-table">
<thead>
<tr>
<th>#</th>
<th>Nombre</th>
<th>País</th>
<th>Fundación</th>
</tr>
</thead>
<tbody>
<!-- Aquí se llenarán los equipos -->
</tbody>
</table>
</section>
</main>
<script src="js/f1.js"></script>
</body>
</html>

View File

@ -65,52 +65,6 @@
</nav>
</header>
<main class="container main-content py-5">
<<<<<<< HEAD
<section class="timeline">
<h2>Formación</h2>
<div class="timeline-item">
<div class="timeline-date">2025</div>
<div class="timeline-content">
<h3>IFCD0034 Programación con .NET</h3>
<p>Curso de programación con el framework .NET. Grupo Colón.</p>
</div>
</div>
<div class="timeline-item">
<div class="timeline-date">2025</div>
<div class="timeline-content">
<h3>IFCT052P0 Gestión de sistemas VMware</h3>
<p>Curso de virtualización de sistemas y aplicaciones con VMware. Grupo Colón.</p>
</div>
</div>
<div class="timeline-item">
<div class="timeline-date">2024</div>
<div class="timeline-content">
<h3>FPGS Desarrollo de Aplicaciones Multiplataforma (DAM)</h3>
<p>Formación profesional superior en desarrollo de software.</p>
<div class="timeline-centro">UNIR</div>
</div>
</div>
<div class="timeline-item">
<div class="timeline-date">2023</div>
<div class="timeline-content">
<h3>IFCD0210 Desarrollo de Aplicaciones con Tecnologías Web</h3>
<p>Curso de desarrollo web (HTML, CSS, JavaScript, PHP, MySQL, XAMPP, GitHub).</p>
<div class="timeline-centro">Grupo Colón</div>
</div>
</div>
</main>
<footer>
<div class="footer">
<div class="footer">
<div>Página realizada íntegramente con código: PHP, JavaScript, HTML y CSS</div>
=======
<div class="accordion mt-4 timeline" id="accordionExample">
<div class="card-header" id="headingOne">
@ -176,18 +130,17 @@
</div>
</main>
<footer>
<div class="footer">
<div class="footer">
<div>Página realizada íntegramente con código: PHP, JavaScript, HTML y CSS</div>
>>>>>>> 5c4ff660dd49607da1d9843160ff7f2bcf7de4b7
<div id="copyright">copyright</div>
<footer class="py-5 text-center">
<div class="container">
<p class="mb-0">&copy; <span id="anio"></span> - Tatiana Villa</p>
</div>
</div>
</footer>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>

View File

@ -1,74 +0,0 @@
:root {
--f1-red: #a00000;
--dark-bg: #15151e;
--card-bg: #1f1f27;
--text: #ffffff;
--border-color: #38383f;
--titulo-color: #ff4c4c;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: var(--dark-bg);
color: var(--text);
margin: 0;
padding: 20px;
}
header {
padding-bottom: 10px;
margin-bottom: 30px;
text-align: center;
color: var(--titulo-color);
}
.dashboard {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
.stat-card {
background-color: var(--card-bg);
padding: 20px;
border-radius: 10px;
border-left: 4px solid var(--f1-red);
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 10px;
}
th, td {
text-align: left;
padding: 8px;
border-bottom: 1px solid var(--border-color);
}
th {
color: var(--titulo-color);
font-size: 0.8rem;
text-transform: uppercase;
}
.pos {
font-weight: bold;
color: var(--f1-red);
}
.cuenta-atras {
margin-bottom: 15px;
text-align: center;
border-bottom: 4px solid var(--f1-red);
}
#countdown {
font-size: 2rem;
font-weight: bold;
letter-spacing: 2px;
}

View File

@ -1,74 +0,0 @@
:root {
--f1-red: #a00000;
--dark-bg: #15151e;
--card-bg: #1f1f27;
--text: #ffffff;
--border-color: #38383f;
--titulo-color: #ff4c4c;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: var(--dark-bg);
color: var(--text);
margin: 0;
padding: 20px;
}
header {
padding-bottom: 10px;
margin-bottom: 30px;
text-align: center;
color: var(--titulo-color);
}
.dashboard {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
}
.stat-card {
background-color: var(--card-bg);
padding: 20px;
border-radius: 10px;
border-left: 4px solid var(--f1-red);
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 10px;
}
th, td {
text-align: left;
padding: 8px;
border-bottom: 1px solid var(--border-color);
}
th {
color: var(--titulo-color);
font-size: 0.8rem;
text-transform: uppercase;
}
.pos {
font-weight: bold;
color: var(--f1-red);
}
.cuenta-atras {
margin-bottom: 15px;
text-align: center;
border-bottom: 4px solid var(--f1-red);
}
#countdown {
font-size: 2rem;
font-weight: bold;
letter-spacing: 2px;
}

View File

@ -1,90 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<<<<<<< HEAD
<title>Estadísticas F1</title>
<link rel="stylesheet" href="css/estilos.css">
=======
<title>F1 Stats Pro - Panel de Control</title>
<link rel="stylesheet" href="css/f1.css">
>>>>>>> 658e2fe3b0adeb6a1d7dc50826d2f2693462a09c
</head>
<body>
<header>
<h1>Estadísticas F1</h1>
<<<<<<< HEAD
<h2 style="color: #bbbb00; border: 1px solid #bbbb00; padding: 10px; border-radius: 5px; width: fit-content; text-align: center;">PÁGINA EN CONSTRUCCIÓN</h2>
</header>
<section class="stat-card cuenta-atras">
<h3> Cuenta atrás para el GP de Australia 2026</h3>
=======
</header>
<section class="stat-card cuenta-atras">
<h3 > Cuenta atrás para el GP de Australia 2026</h3>
>>>>>>> 658e2fe3b0adeb6a1d7dc50826d2f2693462a09c
<div id="countdown">
00d 00h 00m 00s
</div>
</section>
<main class="dashboard">
<section class="stat-card">
<h3 id="session-info">Pilotos</h3>
<table id="pilotos-table">
<thead>
<tr>
<th>#</th>
<<<<<<< HEAD
<th>Código</th>
<th>Nombre</th>
<th>Apellido</th>
<th>Escuderia</th>
<th>Nacionalidad</th>
=======
<th>Nombre</th>
<th>Apellido</th>
<th>Equipo</th>
<th>Nacionalidad</th>
<th>Código</th>
>>>>>>> 658e2fe3b0adeb6a1d7dc50826d2f2693462a09c
</tr>
</thead>
<tbody>
<!-- Aquí se llenarán los pilotos -->
</tbody>
</table>
</section>
<<<<<<< HEAD
</main>
<script src="js/codigo.js"></script>
=======
<section class="stat-card">
<h3 id="session-info">Equipos</h3>
<table id="equipos-table">
<thead>
<tr>
<th>#</th>
<th>Nombre</th>
<th>País</th>
<th>Fundación</th>
</tr>
</thead>
<tbody>
<!-- Aquí se llenarán los equipos -->
</tbody>
</table>
</section>
</main>
<script src="js/f1.js"></script>
>>>>>>> 658e2fe3b0adeb6a1d7dc50826d2f2693462a09c
</body>
</html>

View File

@ -1,126 +0,0 @@
// ===============================
// FUNCIONES DE CONSULTA API
// ===============================
// Obtener calendario completo de la temporada actual
async function obtenerCalendario() {
try {
const response = await fetch("https://api.jolpi.ca/ergast/f1/current.json");
const data = await response.json();
const carreras = data.MRData.RaceTable.Races;
return carreras;
} catch (error) {
console.error("Error al obtener calendario:", error);
return [];
}
}
// Encontrar la siguiente carrera
function encontrarSiguienteCarrera(carreras) {
const ahora = new Date();
for (let carrera of carreras) {
const fecha = new Date(`${carrera.date}T${carrera.time || '00:00:00Z'}`);
if (fecha > ahora) {
return { ...carrera, fecha };
}
}
return null;
}
// ===============================
// CUENTA ATRÁS DINÁMICA
// ===============================
function iniciarCuentaAtras(fechaCarrera) {
const countdown = document.getElementById("countdown");
function actualizar() {
const ahora = new Date();
const diff = fechaCarrera - ahora;
if (diff <= 0) {
countdown.textContent = "🏁 ¡La carrera empezó!";
return;
}
const dias = Math.floor(diff / (1000 * 60 * 60 * 24));
const horas = Math.floor((diff / (1000 * 60 * 60)) % 24);
const minutos = Math.floor((diff / (1000 * 60)) % 60);
const segundos = Math.floor((diff / 1000) % 60);
countdown.textContent = `${dias}d ${horas}h ${minutos}m ${segundos}s`;
}
actualizar();
setInterval(actualizar, 1000);
}
// ===============================
// PILOTOS
// ===============================
async function cargarPilotos() {
try {
const response = await fetch('/f1/api/pilotos');
const pilotos = await response.json();
const tbody = document.querySelector('#pilotos-table tbody');
tbody.innerHTML = ''; // Limpiamos antes de rellenar
pilotos.forEach(p => {
const fila = document.createElement('tr');
fila.innerHTML = `
<td>${p.numero}</td>
<td>${p.codigo}</td>
<td>${p.nombre}</td>
<td>${p.apellido}</td>
<td>${p.escuderia || '-'}</td>
<td>${p.nacionalidad}</td>
`;
tbody.appendChild(fila);
});
} catch (error) {
console.error('Error cargando pilotos:', error);
const tbody = document.querySelector('#pilotos-table tbody');
tbody.innerHTML = `<tr><td colspan="6">No se pudieron cargar los pilotos</td></tr>`;
}
}
// ===============================
// INIT PRINCIPAL
// ===============================
async function init() {
// 1) Obtener calendario
const carreras = await obtenerCalendario();
// 2) Calcular siguiente evento
const proxima = encontrarSiguienteCarrera(carreras);
if (!proxima) {
document.getElementById("countdown").textContent =
"No hay próximos Grandes Premios este año";
return;
}
// 3) Mostrar nombre de la próxima carrera
document.querySelector(".cuenta-atras h3").textContent =
`Cuenta atrás para el GP de ${proxima.raceName}`;
// 4) Iniciar cuenta atrás
iniciarCuentaAtras(proxima.fecha);
// 5) Indicar modo carrera o pronóstico
const ahora = new Date();
if (ahora >= proxima.fecha) {
document.getElementById("session-info").textContent =
"Modo carrera — datos en vivo o resultados";
} else {
document.getElementById("session-info").textContent =
`Próxima sesión de ${proxima.raceName}`;
}
// Cargar pilotos al inicio y cada minuto
cargarPilotos();
setInterval(() => { cargarPilotos(); }, 60000);
}
// Arrancar todo al cargar la página
document.addEventListener("DOMContentLoaded", init);

View File

@ -1,155 +0,0 @@
// ===============================
// FUNCIONES DE CONSULTA API
// ===============================
// Obtener calendario completo de la temporada actual
async function obtenerCalendario() {
try {
const response = await fetch("https://api.jolpi.ca/ergast/f1/current.json");
const data = await response.json();
const carreras = data.MRData.RaceTable.Races;
return carreras;
} catch (error) {
console.error("Error al obtener calendario:", error);
return [];
}
}
// Encontrar la siguiente carrera
function encontrarSiguienteCarrera(carreras) {
const ahora = new Date();
for (let carrera of carreras) {
const fecha = new Date(`${carrera.date}T${carrera.time || '00:00:00Z'}`);
if (fecha > ahora) {
return { ...carrera, fecha };
}
}
return null;
}
// ===============================
// CUENTA ATRÁS DINÁMICA
// ===============================
function iniciarCuentaAtras(fechaCarrera) {
const countdown = document.getElementById("countdown");
function actualizar() {
const ahora = new Date();
const diff = fechaCarrera - ahora;
if (diff <= 0) {
countdown.textContent = "🏁 ¡La carrera empezó!";
return;
}
const dias = Math.floor(diff / (1000 * 60 * 60 * 24));
const horas = Math.floor((diff / (1000 * 60 * 60)) % 24);
const minutos = Math.floor((diff / (1000 * 60)) % 60);
const segundos = Math.floor((diff / 1000) % 60);
countdown.textContent = `${dias}d ${horas}h ${minutos}m ${segundos}s`;
}
actualizar();
setInterval(actualizar, 1000);
}
// ===============================
// PILOTOS
// ===============================
async function cargarPilotos() {
try {
const response = await fetch('/f1/api/pilotos');
const pilotos = await response.json();
const tbody = document.querySelector('#pilotos-table tbody');
tbody.innerHTML = ''; // Limpiamos antes de rellenar
pilotos.forEach(p => {
const fila = document.createElement('tr');
fila.innerHTML = `
<td>${p.numero}</td>
<td>${p.nombre}</td>
<td>${p.apellido}</td>
<td>${p.equipo || '-'}</td>
<td>${p.nacionalidad}</td>
<td>${p.codigo}</td>
`;
tbody.appendChild(fila);
});
} catch (error) {
console.error('Error cargando pilotos:', error);
const tbody = document.querySelector('#pilotos-table tbody');
tbody.innerHTML = `<tr><td colspan="6">No se pudieron cargar los pilotos</td></tr>`;
}
}
// ===============================
// ESCUDERÍAS
// ===============================
async function cargarEscuderias() {
try {
const response = await fetch('/f1/api/escuderias');
const escuderias = await response.json();
const tbody = document.querySelector('#escuderias-table tbody');
tbody.innerHTML = ''; // Limpiamos tabla
escuderias.forEach(e => {
const fila = document.createElement('tr');
fila.innerHTML = `
<td>${e.nombre}</td>
<td>${e.pais}</td>
<td>${e.motor}</td>
`;
tbody.appendChild(fila);
});
} catch (error) {
console.error('Error cargando escuderías:', error);
const tbody = document.querySelector('#escuderias-table tbody');
tbody.innerHTML = `<tr><td colspan="4">No se pudieron cargar las escuderías</td></tr>`;
}
}
// ===============================
// INIT PRINCIPAL
// ===============================
async function init() {
// 1) Obtener calendario
const carreras = await obtenerCalendario();
// 2) Calcular siguiente evento
const proxima = encontrarSiguienteCarrera(carreras);
if (!proxima) {
document.getElementById("countdown").textContent =
"No hay próximos Grandes Premios este año";
return;
}
// 3) Mostrar nombre de la próxima carrera
document.querySelector(".cuenta-atras h3").textContent =
`Cuenta atrás para el GP de ${proxima.raceName}`;
// 4) Iniciar cuenta atrás
iniciarCuentaAtras(proxima.fecha);
// 5) Indicar modo carrera o pronóstico
const ahora = new Date();
if (ahora >= proxima.fecha) {
document.getElementById("session-info").textContent =
"Modo carrera — datos en vivo o resultados";
} else {
document.getElementById("session-info").textContent =
`Próxima sesión de ${proxima.raceName}`;
}
// Cargar pilotos y escuderías al inicio y cada minuto
cargarPilotos();
cargarEscuderias();
setInterval(() => { cargarPilotos(); cargarEscuderias(); }, 60000);
}
// Arrancar todo al cargar la página
document.addEventListener("DOMContentLoaded", init);

View File

@ -1,47 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pilotos de F1</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f7f7f7;
padding: 20px;
}
h1 {
text-align: center;
color: #333;
}
table {
margin: 0 auto;
border-collapse: collapse;
width: 90%;
max-width: 800px;
background-color: white;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
th, td {
padding: 10px 15px;
border: 1px solid #ddd;
text-align: center;
}
th {
background-color: #004080;
color: white;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
tr:hover {
background-color: #cce0ff;
}
</style>
</head>
<body>
<h1>Pilotos de F1</h1>
</body>
</html>

View File

@ -160,15 +160,15 @@
</div>
</main>
<footer>
<div class="footer">
<div class="footer">
<div>Página realizada íntegramente con código: PHP, JavaScript, HTML y CSS</div>
<div id="copyright">copyright</div>
<footer class="py-5 text-center">
<div class="container">
<p class="mb-0">&copy; <span id="anio"></span> - Tatiana Villa</p>
</div>
</div>
</footer>
<script src="js/codigo.js"></script>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>

View File

@ -120,11 +120,6 @@
</div>
</footer>
<!--
<script>
document.getElementById("anio").textContent = new Date().getFullYear();
</script>
-->
<script src="js/codigo.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>

View File

@ -57,7 +57,7 @@ document.addEventListener('DOMContentLoaded', () => {
const s = Math.floor((diff % (1000 * 60)) / 1000);
// Formateamos el texto
countdownContainer.innerHTML = `Examen en: ${d}d ${h}h ${m}m ${s}s`;
countdownContainer.innerHTML = `${d}d ${h}h ${m}m ${s}s`;
};
// Ejecutamos una vez al cargar y luego cada segundo

155
js/f1.js
View File

@ -1,155 +0,0 @@
// ===============================
// FUNCIONES DE CONSULTA API
// ===============================
// Obtener calendario completo de la temporada actual
async function obtenerCalendario() {
try {
const response = await fetch("https://api.jolpi.ca/ergast/f1/current.json");
const data = await response.json();
const carreras = data.MRData.RaceTable.Races;
return carreras;
} catch (error) {
console.error("Error al obtener calendario:", error);
return [];
}
}
// Encontrar la siguiente carrera
function encontrarSiguienteCarrera(carreras) {
const ahora = new Date();
for (let carrera of carreras) {
const fecha = new Date(`${carrera.date}T${carrera.time || '00:00:00Z'}`);
if (fecha > ahora) {
return { ...carrera, fecha };
}
}
return null;
}
// ===============================
// CUENTA ATRÁS DINÁMICA
// ===============================
function iniciarCuentaAtras(fechaCarrera) {
const countdown = document.getElementById("countdown");
function actualizar() {
const ahora = new Date();
const diff = fechaCarrera - ahora;
if (diff <= 0) {
countdown.textContent = "🏁 ¡La carrera empezó!";
return;
}
const dias = Math.floor(diff / (1000 * 60 * 60 * 24));
const horas = Math.floor((diff / (1000 * 60 * 60)) % 24);
const minutos = Math.floor((diff / (1000 * 60)) % 60);
const segundos = Math.floor((diff / 1000) % 60);
countdown.textContent = `${dias}d ${horas}h ${minutos}m ${segundos}s`;
}
actualizar();
setInterval(actualizar, 1000);
}
// ===============================
// PILOTOS
// ===============================
async function cargarPilotos() {
try {
const response = await fetch('/f1/api/pilotos');
const pilotos = await response.json();
const tbody = document.querySelector('#pilotos-table tbody');
tbody.innerHTML = ''; // Limpiamos antes de rellenar
pilotos.forEach(p => {
const fila = document.createElement('tr');
fila.innerHTML = `
<td>${p.numero}</td>
<td>${p.nombre}</td>
<td>${p.apellido}</td>
<td>${p.equipo || '-'}</td>
<td>${p.nacionalidad}</td>
<td>${p.codigo}</td>
`;
tbody.appendChild(fila);
});
} catch (error) {
console.error('Error cargando pilotos:', error);
const tbody = document.querySelector('#pilotos-table tbody');
tbody.innerHTML = `<tr><td colspan="6">No se pudieron cargar los pilotos</td></tr>`;
}
}
// ===============================
// ESCUDERÍAS
// ===============================
async function cargarEscuderias() {
try {
const response = await fetch('/f1/api/escuderias');
const escuderias = await response.json();
const tbody = document.querySelector('#escuderias-table tbody');
tbody.innerHTML = ''; // Limpiamos tabla
escuderias.forEach(e => {
const fila = document.createElement('tr');
fila.innerHTML = `
<td>${e.nombre}</td>
<td>${e.pais}</td>
<td>${e.motor}</td>
`;
tbody.appendChild(fila);
});
} catch (error) {
console.error('Error cargando escuderías:', error);
const tbody = document.querySelector('#escuderias-table tbody');
tbody.innerHTML = `<tr><td colspan="4">No se pudieron cargar las escuderías</td></tr>`;
}
}
// ===============================
// INIT PRINCIPAL
// ===============================
async function init() {
// 1) Obtener calendario
const carreras = await obtenerCalendario();
// 2) Calcular siguiente evento
const proxima = encontrarSiguienteCarrera(carreras);
if (!proxima) {
document.getElementById("countdown").textContent =
"No hay próximos Grandes Premios este año";
return;
}
// 3) Mostrar nombre de la próxima carrera
document.querySelector(".cuenta-atras h3").textContent =
`Cuenta atrás para el GP de ${proxima.raceName}`;
// 4) Iniciar cuenta atrás
iniciarCuentaAtras(proxima.fecha);
// 5) Indicar modo carrera o pronóstico
const ahora = new Date();
if (ahora >= proxima.fecha) {
document.getElementById("session-info").textContent =
"Modo carrera — datos en vivo o resultados";
} else {
document.getElementById("session-info").textContent =
`Próxima sesión de ${proxima.raceName}`;
}
// Cargar pilotos y escuderías al inicio y cada minuto
cargarPilotos();
cargarEscuderias();
setInterval(() => { cargarPilotos(); cargarEscuderias(); }, 60000);
}
// Arrancar todo al cargar la página
document.addEventListener("DOMContentLoaded", init);

View File

@ -1,49 +0,0 @@
const BASE_URL = 'https://api.openf1.org/v1';
async function cargarDatosF1() {
const statusDiv = document.getElementById('api-status');
const tablaCuerpo = document.getElementById('tabla-pilotos-body');
try {
statusDiv.innerHTML = 'Conectando con OpenF1...';
// Usamos una session_key fija de un GP pasado para probar que funciona
// Bahrain 2024 Session Key: 9465
const sessionKey = '9465';
document.getElementById('session-info').innerText = "GP de Bahrain (Datos de Test)";
const driversRes = await fetch(`${BASE_URL}/drivers?session_key=${sessionKey}`);
if (!driversRes.ok) throw new Error(`Error HTTP: ${driversRes.status}`);
const drivers = await driversRes.json();
if (drivers.length === 0) {
statusDiv.innerHTML = 'No se encontraron pilotos.';
return;
}
tablaCuerpo.innerHTML = '';
drivers.forEach(driver => {
const row = document.createElement('tr');
row.innerHTML = `
<td style="border-left: 4px solid #${driver.team_colour || 'ccc'}">
${driver.driver_number}
</td>
<td><strong>${driver.full_name}</strong></td>
<td>${driver.team_name}</td>
<td>${driver.name_acronym}</td>
`;
tablaCuerpo.appendChild(row);
});
statusDiv.innerHTML = '<span style="color: #4caf50;">● Datos cargados con éxito</span>';
} catch (error) {
console.error("DETALLE DEL ERROR:", error);
statusDiv.innerHTML = `<span style="color: #ff4b4b;">● Error: ${error.message}</span>`;
}
}
document.addEventListener('DOMContentLoaded', cargarDatosF1);

View File

@ -1,47 +0,0 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pilotos de F1</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f7f7f7;
padding: 20px;
}
h1 {
text-align: center;
color: #333;
}
table {
margin: 0 auto;
border-collapse: collapse;
width: 90%;
max-width: 800px;
background-color: white;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
th, td {
padding: 10px 15px;
border: 1px solid #ddd;
text-align: center;
}
th {
background-color: #004080;
color: white;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
tr:hover {
background-color: #cce0ff;
}
</style>
</head>
<body>
<h1>Pilotos de F1</h1>
</body>
</html>

View File

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Aplicaciones de Vanguardia</title>
<title>Proyectos de Tatiana Villa</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="css/style.css">
@ -14,7 +14,7 @@
<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>
<span class="text-primary">{</span> Tatiana Villa <span class="text-primary">}</span>
</a>
<a class="navbar-toggler" role="button" data-bs-toggle="collapse" data-bs-target="#menuNav"
@ -41,12 +41,12 @@
<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">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>
<p class="card-text card-tecnologia">HTML, CSS, JS</p>
<a href="https://taiage.tatvil.es" class="btn-link">Saber más →</a>
</div>
</div>
</div>
@ -55,8 +55,8 @@
<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.</p>
<p class="card-text text-muted card-tecnologia">HTML, CSS, Bootstrap, JS, PHP, SQL.</p>
<p class="card-text">Web de recursos católicos gratuitos.</p>
<p class="card-text card-tecnologia">HTML, CSS, Bootstrap, JS, PHP, SQL.</p>
<a href="https://recursos-catolicos.es" class="btn-link">Saber más →</a>
</div>
</div>
@ -66,9 +66,9 @@
<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">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>
<p class="card-text">Estadísticas de Madrid, L'Ampolla y L'Alfas del Pi.</p>
<p class="card-text card-tecnologia">PHP, MySQL, HTML, CSS, JS.</p>
<a href="https://eltiempo.tatvil.es" class="btn-link">Saber más →</a>
</div>
</div>
</div>
@ -77,9 +77,20 @@
<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, MySQL.</p>
<a href="formula1/index.html" class="btn-link">Saber más →</a>
<p class="card-text">Web de estadísticas de Fórmula 1.</p>
<p class="card-text card-tecnologia">Java, Spring, Hibernate, MySQL.</p>
<a href="https://formula1.tatvil.es" 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">Autocompra</h5>
<p class="card-text">Aplicación de compras automatizadas.</p>
<p class="card-text card-tecnologia">HTML, CSS, JavaScript, JSON.</p>
<a href="https://autocompra.tatvil.es" class="btn-link">Saber más →</a>
</div>
</div>
</div>
@ -88,8 +99,8 @@
<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">Juego clásico optimizado para móviles.</p>
<p class="card-text text-muted card-tecnologia">HTML, CSS, JavaScript.</p>
<p class="card-text">Juego clásico optimizado para móviles.</p>
<p class="card-text card-tecnologia">HTML, CSS, JavaScript.</p>
<a href="piedra-papel-tijera.html" class="btn-link">Saber más →</a>
</div>
</div>

View File

@ -1,34 +0,0 @@
<!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

@ -1,50 +0,0 @@
<!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

@ -1,62 +0,0 @@
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

@ -1,391 +0,0 @@
/* 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

@ -1,112 +0,0 @@
/* 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

@ -1,69 +0,0 @@
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

@ -1,45 +0,0 @@
/* 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

@ -1,76 +0,0 @@
/* 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

@ -1,32 +0,0 @@
# 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).

View File

@ -1,99 +0,0 @@
[
{ "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

@ -1,9 +0,0 @@
[
{ "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

@ -1,122 +0,0 @@
[
{
"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

@ -1,114 +0,0 @@
[
{
"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

@ -1,152 +0,0 @@
[
{ "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

@ -1,368 +0,0 @@
[
{ "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

@ -1,31 +0,0 @@
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

View File

@ -1,33 +0,0 @@
<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>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 279 KiB

Some files were not shown because too many files have changed in this diff Show More