/* ========================================
   RESET BÁSICO
   ======================================== */
* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}
/* ========================================
   ESTILOS BASE PARA EL HTML
   ======================================== */
html {
  font-size: 100%; /* Para accesibilidad, permite que el usuario ajuste el tamaño base */
}

/* ========================================
   ESTILOS BASE PARA EL BODY
   ======================================== */

body {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
  font-size: 1rem; /* 16px base */
  line-height: 1.6;
  color: var(--color-texto-principal);
  background-color: var(--color-fondo-principal);
  transition: background-color 0.3s ease, color 0.3s ease;
}

/* ========================================
   VARIABLES CSS PARA COLORES HSL
   ======================================== */

/*
 * INVESTIGACIÓN: ¿Qué es HSL y por qué usarlo?
 * 
 * 1. ¿Qué significa cada valor en hsl()?
 *    - H (Hue/Matiz): Es el tono del color en grados (0-360°).
 *      0° = Rojo, 60° = Amarillo, 120° = Verde, 180° = Cian, 240° = Azul, 300° = Magenta
 *    - S (Saturation/Saturación): La intensidad del color (0-100%).
 *      0% = Gris (sin color), 100% = Color puro y vibrante
 *    - L (Lightness/Luminosidad): La claridad del color (0-100%).
 *      0% = Negro, 50% = Color normal, 100% = Blanco
 * 
 * 2. ¿Por qué HSL puede ser más útil que HEX o RGB?
 *    - Permite crear variaciones de color fácilmente: Cambiando solo Lightness puedes hacer tonos más claros/oscuros
 *      sin necesitar calculadora. Ej: hsl(200, 70%, 50%) → hsl(200, 70%, 70%) para versión clara.
 *    - Es más intuitivo para humanos: Es más natural pensar "azul 20% más claro" que calcular valores RGB.
 *    - Facilita crear paletas coherentes: Mantener el mismo Hue y Saturation garantiza colores armónicos.
 * 
 * 3. Ejemplo práctico: ¿Cuándo usarías HSL en un proyecto real?
 *    - En sistemas de temas (light/dark mode): Inviertes solo el valor de Lightness para toda la paleta.
 *    - Para crear estados hover/active: Incrementa/reduce Lightness del mismo color para consistencia visual.
 *    - En paletas de colores grandes: Fijas Hue y varía Lightness para tonos de la misma familia de color.
 */

/* ========================================
   PALETA DE COLORES USANDO HSL
   ======================================== */
:root {
  /* COLOR TEMA CLARO (por defecto) */
  /* Color primario: Morado/Azul */
  --color-primario: hsl(270, 70%, 50%);
  /* Variaciones: Mismo Hue (270) y Saturation (70%), variando Lightness */
  --color-primario-claro: hsl(270, 70%, 70%); /* Más claro para fondos o acentos */
  --color-primario-oscuro: hsl(270, 70%, 30%); /* Más oscuro para texto o bordes */

  /* Colores de texto y fondo - TEMA CLARO */
  --color-texto-principal: hsl(0, 0%, 20%); /* Gris oscuro para texto */
  --color-fondo-principal: hsl(0, 0%, 98%); /* Blanco casi puro */
  --color-fondo-secundario: hsl(0, 0%, 95%); /* Gris muy claro para fondos alternos */
  --color-tarjeta: hsl(0, 0%, 100%); /* Blanco puro para tarjetas */
  
  /* Espaciado */
  --espaciado-pequeno: 0.5rem;
  --espaciado-medio: 1rem;
  --espaciado-grande: 2rem;
}

/* VARIABLES PARA TEMA OSCURO */
html[data-theme="oscuro"] {
  /* Invertimos Lightness para crear variaciones oscuras del mismo Hue */
  --color-primario: hsl(270, 70%, 60%); /* Más claro para que sea visible en fondo oscuro */
  --color-primario-claro: hsl(270, 70%, 80%); /* Aún más claro para acentos */
  --color-primario-oscuro: hsl(270, 70%, 40%); /* Para bordes/sombras */

  /* Colores de texto y fondo - TEMA OSCURO */
  --color-texto-principal: hsl(0, 0%, 90%); /* Blanco casi puro para texto */
  --color-fondo-principal: hsl(0, 0%, 10%); /* Negro casi puro para fondo */
  --color-fondo-secundario: hsl(0, 0%, 15%); /* Gris oscuro para áreas secundarias */
  --color-tarjeta: hsl(0, 0%, 20%); /* Gris algo más claro para tarjetas */
}

/* ========================================
   HEADER: FLEXBOX PARA CENTRADO Y DISTRIBUCIÓN
   ======================================== */
.header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 2rem;
  background-color: var(--color-primario);
  color: white;
  position: relative;
}

.header-contenido {
  max-width: 800px;
  margin: 0 auto;
  padding: 1rem;
  text-align: center;
}

.titulo-principal {
  font-size: 2.5rem;
  margin-bottom: 0.5rem;
  color: white;
}

.descripcion {
  font-size: 1.1rem;
  color: hsl(0, 0%, 90%);
}

/* ========================================
   CONTENEDOR PRINCIPAL
   ======================================== */
.contenedor {
  max-width: 1200px;
  margin: 0 auto;
  padding: 2rem;
}

/* ========================================
   GALERÍA: CSS GRID RESPONSIVE
   ======================================== */
.galeria {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.5rem;
}

/* ========================================
   ANIMACIONES DE ENTRADA CON @KEYFRAMES
   ======================================== */
/*
 * @keyframes permite definir animaciones CSS personalizadas.
 * Funciona con porcentajes (0%, 50%, 100%) o keywords (from, to).
 * Aquí creamos una animación "fadeInSlideUp" que combina:
 * - Fade-in: La tarjeta aparece gradualmente (opacidad de 0 a 1)
 * - Slide-up: La tarjeta sube desde abajo (translate Y)
 */
@keyframes fadeInSlideUp {
  from {
    opacity: 0;           /* Completamente transparente */
    transform: translateY(30px);  /* 30px más abajo de su posición final */
  }
  to {
    opacity: 1;           /* Completamente visible */
    transform: translateY(0);     /* En su posición final */
  }
}

/* ========================================
   TARJETAS DE FOTOS: ESTILOS Y HOVER
   ======================================== */

.foto-tarjeta {
  background-color: var(--color-tarjeta);
  border-radius: 15px;
  overflow: hidden;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
  transition: transform 0.3s ease, box-shadow 0.3s ease, background-color 0.3s ease;
  animation: fadeInSlideUp 0.6s ease-out forwards;
}

/* Efecto en cascada: cada tarjeta se anima con un pequeño retraso */
.foto-tarjeta:nth-child(1) { animation-delay: 0.1s; }
.foto-tarjeta:nth-child(2) { animation-delay: 0.2s; }
.foto-tarjeta:nth-child(3) { animation-delay: 0.3s; }
.foto-tarjeta:nth-child(4) { animation-delay: 0.4s; }
.foto-tarjeta:nth-child(5) { animation-delay: 0.5s; }
.foto-tarjeta:nth-child(6) { animation-delay: 0.6s; }
.foto-tarjeta:nth-child(7) { animation-delay: 0.7s; }
.foto-tarjeta:nth-child(8) { animation-delay: 0.8s; }
.foto-tarjeta:nth-child(9) { animation-delay: 0.9s; }

.foto-tarjeta:hover {
  transform: translateY(-4px);
  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.2);
}

.foto-tarjeta img {
  width: 100%;
  height: 250px;
  object-fit: cover;
  display: block;
  transition: transform 0.3s ease;
}

/* La imagen se escala al pasar el cursor */
.foto-tarjeta:hover img {
  transform: scale(1.08);
}

.foto-info {
  padding: 1rem;
  background-color: var(--color-tarjeta);
}

.foto-titulo {
  font-size: 1.2rem;
  margin-bottom: 0.5rem;
  color: var(--color-primario-oscuro);
}

/* En tema oscuro, usar color más claro para better contrast */
html[data-theme="oscuro"] .foto-titulo {
  color: var(--color-primario-claro);
}

.foto-descripcion {
  font-size: 1rem;
  color: var(--color-texto-principal);
  margin: 0;
}

/* ========================================
   FOOTER ESTILIZADO
   ======================================== */
.footer {
  background-color: var(--color-primario-oscuro);
  color: white;
  text-align: center;
  padding: var(--espaciado-grande);
  margin-top: var(--espaciado-grande);
  transition: background-color 0.3s ease, color 0.3s ease;
}

/* ========================================
   BOTÓN DE CAMBIO DE TEMA
   ======================================== */
.boton-tema {
  position: absolute;
  top: 1.5rem;
  right: 2rem;
  background: none;
  border: none;
  border-radius: 50%;
  width: 3rem;
  height: 3rem;
  font-size: 1.5rem;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: all 0.3s ease;
  color: white;
}

.boton-tema:hover {
  background-color: rgba(255, 255, 255, 0.2);
  transform: scale(1.1);
}

.boton-tema:active {
  transform: scale(0.95);
}

.icono-tema {
  display: inline-block;
  transition: transform 0.3s ease;
}

/* Icono para tema claro */
.icono-tema::before {
  content: '☀️';
}

/* Icono para tema oscuro */
html[data-theme="oscuro"] .icono-tema::before {
  content: '🌙';
}

.boton-tema:hover .icono-tema {
  transform: rotate(20deg);
}

/* ========================================
   MEDIA QUERIES - RESPONSIVE DESIGN
   ======================================== */

/* Tablets - 2 columnas (máximo 768px) */
@media (max-width: 768px) {
  .galeria {
    grid-template-columns: repeat(2, 1fr);
  }
  
  .titulo-principal {
    font-size: 2rem;
  }
}

/* Móviles - 1 columna (máximo 480px) */
@media (max-width: 480px) {
  .galeria {
    grid-template-columns: 1fr;
  }
  
  .titulo-principal {
    font-size: 1.8rem;
  }
  
  .contenedor {
    padding: var(--espaciado-medio);
  }
}
