/* =========================================================
   BASE: estructura general, encabezado y menú
   ========================================================= */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
body {
  margin: 0;
  min-height: 100vh;
  background: var(--color-fondo);
  color: var(--color-texto);
  font-family: var(--fuente-texto);
  font-size: var(--t-cuerpo);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}
img, video { max-width: 100%; display: block; }
a { color: inherit; }
:focus-visible { outline: 2px solid var(--color-texto); outline-offset: 4px; }
.visualmente-oculto {
  position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap;
}

/* ---------- Encabezado ---------- */
.header {
  position: fixed;
  inset: 0 0 auto 0;
  z-index: 20;
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--espacio-s);
  padding: calc(var(--margen) * 0.62) var(--margen) var(--espacio-s);
  transition: background-color 0.3s;
}
.header.con-fondo { background: var(--color-fondo); }

.header__nombre {
  font-family: var(--fuente-display);
  font-size: var(--t-nombre);
  line-height: 1;
  text-decoration: none;
  letter-spacing: 0.01em;
  white-space: nowrap;
}
/* el lema reemplaza al nombre con el menú abierto */
.header__lema { display: none; }
.menu-abierto .header__nombre .header__texto { display: none; }
.menu-abierto .header__nombre .header__lema { display: inline; }

.boton-menu {
  font-family: var(--fuente-display);
  font-size: var(--t-menu-boton);
  line-height: 1;
  color: inherit;
  background: none;
  border: 0;
  padding: 0.2em 0;
  cursor: pointer;
  letter-spacing: 0.04em;
}
.menu-abierto .boton-menu { visibility: hidden; }

/* ---------- Panel del menú ---------- */
.menu {
  position: fixed;
  inset: 0 0 0 auto;
  z-index: 30;
  width: var(--menu-ancho);
  background: var(--color-panel);
  border-radius: var(--radio-panel) 0 0 var(--radio-panel);
  padding: calc(var(--margen) * 0.62) var(--margen) var(--margen);
  overflow-y: auto;
  transform: translateX(100%);
  visibility: hidden;
  transition: transform var(--menu-duracion) cubic-bezier(.7, 0, .2, 1),
              visibility 0s linear var(--menu-duracion);
}
.menu-abierto .menu {
  transform: none;
  visibility: visible;
  transition: transform var(--menu-duracion) cubic-bezier(.7, 0, .2, 1);
}
.menu__cerrar {
  display: block;
  margin-left: auto;
  font-family: var(--fuente-display);
  font-size: var(--t-menu-boton);
  line-height: 1;
  background: none;
  border: 0;
  color: inherit;
  cursor: pointer;
  padding: 0.1em 0.2em;
}
.menu__lista {
  list-style: none;
  margin: var(--espacio-s) 0 0;
  padding: 0 0 0 clamp(0rem, 2.5vw, 2rem);
}
.menu__lista li + li { margin-top: clamp(0.6rem, 1.4vw, 1.1rem); }
.menu__lista a { text-decoration: none; display: inline-block; }
.menu__titulo {
  display: block;
  font-family: var(--fuente-display);
  font-size: var(--t-menu-item);
  line-height: 1.05;
  transition: transform 0.25s;
}
.menu__desc {
  display: block;
  padding-left: 1.4rem;
  font-weight: 600;
  font-size: clamp(1rem, 1.5vw, 1.4rem);
}
.menu__lista a:hover .menu__titulo,
.menu__lista a[aria-current="page"] .menu__titulo { transform: translateX(0.4rem); }
.menu__lista a[aria-current="page"] .menu__titulo::after { content: " ·"; }

/* capa que cierra el menú al tocar fuera */
.menu-velo {
  position: fixed; inset: 0; z-index: 25;
  background: transparent;
  display: none;
}
.menu-abierto .menu-velo { display: block; }

@media (max-width: 700px) {
  .menu { width: 100vw; border-radius: 0; }
  .menu-abierto .header__nombre { visibility: hidden; }
}

/* ---------- Contenido de páginas internas ---------- */
.pagina {
  padding: calc(var(--alto-header) + var(--espacio-m)) var(--margen) var(--espacio-l);
  max-width: 90rem;
  margin: 0 auto;
}
.pagina__encabezado { margin-bottom: var(--espacio-l); max-width: var(--ancho-lectura); }
.pagina__titulo {
  font-family: var(--fuente-display);
  font-weight: 400;
  font-size: var(--t-h1);
  line-height: 1;
  margin: 0 0 var(--espacio-s);
}
.pagina__intro { color: var(--color-texto-suave); font-size: 1.15em; margin: 0; }

h1, h2, h3 { font-family: var(--fuente-display); font-weight: 400; line-height: 1.1; }

.etiqueta {
  display: inline-block;
  font-size: var(--t-pequeno);
  font-weight: 600;
  padding: 0.15em 0.75em;
  border: 1px solid var(--color-linea);
  border-radius: 999px;
}
.meta { color: var(--color-texto-suave); font-size: var(--t-pequeno); }

.filtros { display: flex; flex-wrap: wrap; gap: var(--espacio-xs); margin-bottom: var(--espacio-m); }
.filtros button {
  font: inherit; font-size: var(--t-pequeno); font-weight: 600;
  color: inherit; background: none; cursor: pointer;
  padding: 0.3em 1em; border: 1px solid var(--color-linea); border-radius: 999px;
}
.filtros button[aria-pressed="true"] { background: var(--color-texto); color: var(--color-fondo); }

.vacio { color: var(--color-texto-suave); }
.volver { display: inline-block; margin-bottom: var(--espacio-m); font-weight: 600; text-decoration: none; }
.volver:hover { text-decoration: underline; }

/* ---------- Blog (Ideas) ---------- */
.lista-entradas { list-style: none; padding: 0; margin: 0; max-width: 60rem; }
.entrada-item { border-top: 1px solid var(--color-linea); }
.entrada-item:last-child { border-bottom: 1px solid var(--color-linea); }
.entrada-item a {
  display: grid;
  grid-template-columns: 8rem 1fr;
  gap: var(--espacio-s) var(--espacio-m);
  padding: var(--espacio-m) 0;
  text-decoration: none;
}
.entrada-item h2 { font-size: var(--t-h2); margin: 0 0 0.3rem; transition: transform .25s; }
.entrada-item a:hover h2 { transform: translateX(0.4rem); }
.entrada-item p { margin: 0; color: var(--color-texto-suave); }
@media (max-width: 600px) { .entrada-item a { grid-template-columns: 1fr; gap: 0.3rem; } }

/* ---------- Artículo / detalle ---------- */
.articulo { max-width: var(--ancho-lectura); margin: 0 auto; }
.articulo__titulo { font-size: var(--t-h1); margin: 0.2em 0 0.4em; }
.articulo__portada { border-radius: var(--radio-tarjeta); margin: var(--espacio-m) 0; width: 100%; }
.prosa h2 { font-size: var(--t-h2); margin: 2em 0 0.5em; }
.prosa h3 { font-size: var(--t-h3); margin: 1.6em 0 0.4em; }
.prosa p, .prosa ul, .prosa ol { margin: 0 0 1.1em; }
.prosa img { border-radius: var(--radio-tarjeta); margin: var(--espacio-m) 0; }
.prosa blockquote {
  margin: var(--espacio-m) 0; padding-left: var(--espacio-m);
  border-left: 2px solid var(--color-texto);
  font-style: italic; font-size: 1.15em;
}
.prosa a { text-underline-offset: 3px; }
.prosa hr { border: 0; border-top: 1px solid var(--color-linea); margin: var(--espacio-l) 0; }

/* ---------- Portafolio (Proyectos / Archivo) ---------- */
.rejilla {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 17rem), 1fr));
  gap: var(--espacio-m) var(--espacio-m);
}
.tarjeta { text-decoration: none; display: block; }
.tarjeta__imagen {
  aspect-ratio: 4 / 5;
  border-radius: var(--radio-tarjeta);
  background: var(--color-panel-suave);
  overflow: hidden;
}
.tarjeta__imagen img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s; }
.tarjeta:hover .tarjeta__imagen img { transform: scale(1.04); }
.tarjeta__titulo { font-size: var(--t-h3); margin: 0.7rem 0 0.15rem; }
.tarjeta__sub { margin: 0; color: var(--color-texto-suave); font-size: var(--t-pequeno); }
/* variante del archivo: más pequeña y cuadrada */
.rejilla--archivo { grid-template-columns: repeat(auto-fill, minmax(min(100%, 13rem), 1fr)); gap: var(--espacio-s); }
.rejilla--archivo .tarjeta__imagen { aspect-ratio: 1; }

.galeria { display: grid; gap: var(--espacio-s); margin-top: var(--espacio-m); }
.galeria img { border-radius: var(--radio-tarjeta); width: 100%; }
.pieza__datos { display: flex; flex-wrap: wrap; gap: var(--espacio-xs); align-items: center; }
.pieza__enlace { display: inline-block; margin-top: var(--espacio-s); font-weight: 700; }

/* ---------- Pie ---------- */
.pie {
  padding: var(--espacio-m) var(--margen);
  font-size: var(--t-pequeno);
  color: var(--color-texto-suave);
}
