Limpieza, organizacion y depuracion de pagina web
74
css/f1.css
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -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; }
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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; }
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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" }
|
||||
]
|
||||
|
||||
|
|
@ -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" }
|
||||
]
|
||||
|
|
@ -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; }
|
||||
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 301 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
|
@ -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 |
|
Before Width: | Height: | Size: 16 KiB |
|
|
@ -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 © <span id="year"></span> Tatiana Villa</p>
|
||||
</footer>
|
||||
|
||||
<script src="js/estadisticas.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -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 © <span id="year"></span> Tatiana Villa</p>
|
||||
</footer>
|
||||
|
||||
<script src="js/codigo.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -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}¤t=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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
});
|
||||
});
|
||||
|
|
@ -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();
|
||||
});
|
||||
|
|
@ -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();
|
||||
});
|
||||
});
|
||||
|
|
@ -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();
|
||||
?>
|
||||
|
|
@ -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();
|
||||
?>
|
||||
|
|
@ -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();
|
||||
?>
|
||||
|
|
@ -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();
|
||||
?>
|
||||
|
|
@ -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();
|
||||
?>
|
||||
35781
eltiempo/sql/clima.sql
|
|
@ -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
|
|
@ -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>
|
||||
|
|
@ -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">© <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>
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -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>
|
||||
|
|
@ -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);
|
||||
|
|
@ -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);
|
||||
|
|
@ -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>
|
||||
|
|
@ -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">© <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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
|
@ -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);
|
||||
|
|
@ -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);
|
||||
47
pilotos.html
|
|
@ -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>
|
||||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -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&crid=2X17ZIW20JHVF&keywords=biblia&qid=1686516688&sprefix=biblia%2Caps%2C94&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&keywords=catecismo+astete&qid=1686517828&s=books&sprefix=Catecismo+as%2Cstripbooks%2C80&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&qid=1686518245&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&crid=3JXXXQXP05Y9H&keywords=san+francisco+de+asis+luis+perez+simon&qid=1686518697&s=digital-text&sprefix=san+francisco+de+asis+luis+perez+simon%2Cdigital-text%2C77&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>
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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).
|
||||
|
|
@ -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)" }
|
||||
]
|
||||
|
||||
|
|
@ -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" }
|
||||
]
|
||||
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
|
@ -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"
|
||||
}
|
||||
]
|
||||
|
|
@ -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." }
|
||||
]
|
||||
|
|
@ -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" }
|
||||
]
|
||||
|
|
@ -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
|
||||
|
|
@ -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>
|
||||
|
Before Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 217 KiB |
|
Before Width: | Height: | Size: 5.7 MiB |
|
Before Width: | Height: | Size: 6.8 MiB |
|
Before Width: | Height: | Size: 5.2 MiB |
|
Before Width: | Height: | Size: 5.2 MiB |
|
Before Width: | Height: | Size: 5.5 MiB |
|
Before Width: | Height: | Size: 32 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 3.6 MiB |
|
Before Width: | Height: | Size: 5.0 MiB |
|
Before Width: | Height: | Size: 5.4 MiB |
|
Before Width: | Height: | Size: 5.5 MiB |
|
Before Width: | Height: | Size: 5.3 MiB |
|
Before Width: | Height: | Size: 7.7 MiB |
|
Before Width: | Height: | Size: 8.9 MiB |
|
Before Width: | Height: | Size: 6.3 MiB |
|
Before Width: | Height: | Size: 5.9 MiB |
|
Before Width: | Height: | Size: 6.1 MiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 121 KiB |
|
Before Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 66 KiB |
|
Before Width: | Height: | Size: 3.6 MiB |
|
Before Width: | Height: | Size: 126 KiB |
|
Before Width: | Height: | Size: 1.6 MiB |
|
Before Width: | Height: | Size: 6.1 MiB |
|
Before Width: | Height: | Size: 5.8 MiB |
|
Before Width: | Height: | Size: 5.4 MiB |
|
Before Width: | Height: | Size: 5.1 MiB |
|
Before Width: | Height: | Size: 4.7 MiB |
|
Before Width: | Height: | Size: 78 KiB |
|
Before Width: | Height: | Size: 158 KiB |
|
Before Width: | Height: | Size: 279 KiB |