/* ==========================================================================
   100PHOTOGRAPHERS — Ficha de fotógrafo
   Requiere variables.css y base.css cargados antes.
   ========================================================================== */

.profile-section {
  width: 100%;
  max-width: var(--layout-max-width);
  margin-inline: auto;
  padding-inline: var(--space-margin-mobile);
}

@media (min-width: 1024px) {
  .profile-section {
    padding-inline: var(--space-margin-desktop);
  }
}

.profile-section + .profile-section {
  margin-top: var(--space-xl);
}

/* ==========================================================================
   Header — fondo semi-blur + retrato + nombre + bio + tags
   ========================================================================== */
.profile-header {
  position: relative;
  overflow: hidden; /* el backdrop de abajo se escala 1.05 para tapar el
    blur y desborda unos px por cada lado — sin esto provoca un pequeño
    scroll horizontal en toda la página */
  color: var(--color-on-primary);
  background-color: var(--color-primary);
  padding-top: var(--navbar-height); /* debajo del TopNavBar fijo */
}

.profile-header__backdrop {
  position: absolute;
  inset: 0;
  background-color: var(--color-primary-container);
  background-image: var(--profile-backdrop-image, none);
  background-size: cover;
  background-position: center;
  filter: blur(6px) brightness(0.55);
  transform: scale(1.05); /* evita bordes nítidos por el blur */
}

.profile-header__inner {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: var(--space-sm);
  padding-block: var(--space-xl);
}

.profile-header__portrait {
  width: 148px;
  height: 148px;
  border-radius: var(--radius-full);
  overflow: hidden;
  border: 3px solid var(--color-on-primary);
  background: repeating-linear-gradient(
    135deg,
    var(--color-surface-container-high),
    var(--color-surface-container-high) 8px,
    var(--color-surface-container-highest) 8px,
    var(--color-surface-container-highest) 16px
  );
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: var(--font-headline-md-size);
  font-weight: 700;
  color: var(--color-on-primary-container);
}

.profile-header__portrait img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.profile-header__name {
  font-size: var(--font-artist-name-size);
  font-weight: var(--font-artist-name-weight);
  line-height: 1.15;
}

.profile-header__meta {
  font-size: var(--font-label-sm-size);
  letter-spacing: var(--font-label-sm-tracking);
  text-transform: uppercase;
  opacity: 0.75;
}

.profile-header__bio {
  max-width: 62ch;
  font-size: var(--font-body-lg-size);
  line-height: var(--font-body-lg-line-height);
  opacity: 0.92;
}

@media (max-width: 767px) {
  .profile-header__bio {
    font-size: 16px;
  }
}

.profile-header__tags {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 6px;
}

.profile-header__tags .chip {
  background-color: rgba(255, 255, 255, 0.14);
  color: var(--color-on-primary);
}

/* ==========================================================================
   Acordeón — Trayectoria / Estilo / Obra destacada / Influencia
   ========================================================================== */
.accordion {
  border-top: 1px solid var(--color-input-border);
}

.accordion-item {
  border-bottom: 1px solid var(--color-input-border);
}

.accordion-trigger {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-sm);
  padding-block: var(--space-sm);
  text-align: left;
}

.accordion-trigger__label {
  font-size: var(--font-section-title-size);
  font-weight: var(--font-section-title-weight);
}

.accordion-trigger__icon {
  flex-shrink: 0;
  transition: transform 0.25s ease;
}

.accordion-item.is-open .accordion-trigger__icon {
  transform: rotate(45deg);
}

.accordion-panel {
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease;
}

.accordion-item.is-open .accordion-panel {
  /* Generoso a propósito: un max-height fijo demasiado ajustado recorta
     (y en móvil, con el texto envolviendo en más líneas, llega a solapar
     visualmente el siguiente acordeón) las biografías más largas. */
  max-height: 3000px;
}

.accordion-panel__text {
  padding-bottom: var(--space-md);
  font-size: 16px;
  line-height: var(--font-body-lg-line-height);
  color: var(--color-on-surface-variant);
  text-align: justify;
  white-space: pre-line;
}

/* ==========================================================================
   Slider genérico (base compartida por slideshow e info-slider)
   ========================================================================== */
.slider {
  position: relative;
}

.slider__track {
  display: flex;
  gap: var(--space-sm);
  overflow-x: auto;
  overflow-y: hidden;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  padding-top: var(--space-xs);
  padding-bottom: var(--space-xs);
  scrollbar-width: none;
}

.slider__track::-webkit-scrollbar {
  display: none;
}

.slider__pagination {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: var(--space-sm);
  margin-top: var(--space-sm);
}

.slider__dots {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: var(--space-xs);
}

.slider__dot {
  width: 10px;
  height: 10px;
  padding: 0;
  border-radius: var(--radius-full);
  background-color: #bbbbbb;
  transition: background-color 0.2s ease, transform 0.2s ease;
}

.slider__dot:hover {
  background-color: #5b5b5b;
}

.slider__dot.is-active {
  background-color: #5b5b5b;
  transform: scale(1.35);
}

.slider__arrow {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 6px;
  background: none;
  border: none;
  color: var(--color-on-surface-variant);
  transition: color 0.2s ease, transform 0.2s ease;
}

.slider__arrow:hover {
  color: var(--color-on-surface);
}

.slider__arrow--prev:hover {
  transform: translateX(-3px);
}

.slider__arrow--next:hover {
  transform: translateX(3px);
}

.slider__track {
  cursor: grab;
}

.slider__track.is-dragging {
  cursor: grabbing;
  scroll-snap-type: none;
  user-select: none;
}

/* ==========================================================================
   Galería de fotos — única galería de toda la ficha (grid de piezas
   cuadradas con botón "Más" y lightbox al hacer clic). La usa la sección
   "Galería de imágenes destacadas" (#featured-gallery); los proyectos ya
   no tienen galería propia.
   Patrón: primera pieza más ancha (2 columnas desde tablet), resto
   cuadradas en grid de 2-3 columnas según el ancho de pantalla.
   ========================================================================== */
.photo-gallery {
  display: grid;
  grid-template-columns: repeat(1, 1fr);
  gap: var(--space-sm);
  padding-block: var(--space-xs);
  margin-top: var(--space-md);
}

@media (min-width: 640px) {
  .photo-gallery {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (min-width: 1024px) {
  .photo-gallery {
    grid-template-columns: repeat(3, 1fr);
  }
}

.photo-gallery__item {
  aspect-ratio: 1 / 1;
  border-radius: var(--radius-lg);
  overflow: hidden;
  background-color: var(--color-surface-container-low);
  filter: drop-shadow(0 6px 16px rgba(0, 0, 0, 0.08));
}

.photo-gallery__item:first-child {
  grid-column: span 1;
  aspect-ratio: 1 / 1;
}

@media (min-width: 640px) {
  .photo-gallery__item:first-child {
    grid-column: span 2;
    aspect-ratio: 2 / 1;
  }
}

.photo-gallery__item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.photo-gallery__item[hidden] {
  display: none;
}

/* En mobile las piezas dejan de recortarse a cuadrado: se ven completas,
   ancho 100% y alto según la proporción real de cada foto. */
@media (max-width: 639px) {
  .photo-gallery__item,
  .photo-gallery__item:first-child {
    aspect-ratio: auto;
    width: 100%;
    height: auto;
  }

  .photo-gallery__item img {
    width: 100%;
    height: auto;
    object-fit: contain;
  }
}

/* ---- Celda "ver más": botón redondo negro con "+" blanco ----
   Ocupa toda la anchura del grid (no una celda cuadrada más) para quedar
   centrado y pegado a la última fila de fotos. */
.photo-gallery__more {
  grid-column: 1 / -1;
  aspect-ratio: auto;
  display: flex;
  align-items: center;
  justify-content: center;
  padding-block: var(--space-xs);
}

.photo-gallery__more[hidden] {
  display: none;
}

.photo-gallery__more-btn {
  width: 64px;
  height: 64px;
  border-radius: 50%;
  background-color: var(--color-primary);
  color: var(--color-on-primary);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: transform 0.2s ease;
}

.photo-gallery__more-btn:hover {
  transform: scale(1.2);
}

/* ==========================================================================
   Proyectos destacados
   Cada proyecto es un bloque de ancho completo; el contenido interior se
   centra con .container para alinearse con el resto de secciones.
   ========================================================================== */
#projects-container {
  margin-top: var(--space-xl);
}

#projects-container + .profile-section {
  margin-top: var(--space-xl);
}

.projects-heading {
  font-size: 32px;
}

.project-block {
  width: 100%;
  padding-block: var(--space-lg);
}

/* Separador entre proyectos consecutivos (no aparece antes del primero).
   :first-of-type (no :first-child) porque el título "Proyectos destacados"
   es un <div> que precede al primer <section class="project-block">.
   El ::before va sobre el .container interior (no el bloque de ancho
   completo), así el 20% se calcula sobre el ancho del contenido, no del
   viewport. */
.project-block:not(:first-of-type) > .container::before {
  content: "";
  display: block;
  width: 20%;
  height: 2px;
  margin: 0 auto var(--space-lg);
  background-color: #5c5c5c;
}

.project-header__year {
  font-size: var(--font-label-sm-size);
  font-weight: var(--font-label-sm-weight);
  letter-spacing: var(--font-label-sm-tracking);
  text-transform: uppercase;
  color: var(--color-on-surface-variant);
  margin-bottom: var(--space-xs);
}

.project-header__title {
  font-size: 24px;
  font-weight: 600;
  margin-bottom: var(--space-sm);
}

.project-header__description {
  font-size: 16px;
  line-height: var(--font-body-lg-line-height);
  color: var(--color-on-surface-variant);
  text-align: justify;
  white-space: pre-line;
}

/* ---- Enlace a la fuente oficial del proyecto ---- */
.project-source-link {
  display: inline-flex;
  align-items: center;
  gap: var(--space-xs);
  margin-top: var(--space-sm);
  font-size: 16px;
  font-weight: 600;
  color: var(--color-primary);
  text-decoration: none;
}

/* Contenedor de los enlaces del proyecto ("Ver proyecto en…" y "Ver libro") */
.project-header__links {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-xs) var(--space-md);
  margin-top: var(--space-sm);
}

.project-header__links .project-source-link {
  margin-top: 0;
}

.project-source-link svg {
  flex-shrink: 0;
}

.project-source-link__domain {
  color: #a5a5a5;
}

.project-source-link:hover {
  text-decoration: underline;
}

/* ---- Slider de datos técnicos (icono + label + valor) ---- */
.project-info-slider .slide {
  flex: 0 0 82%;
  scroll-snap-align: start;
  background-color: var(--color-surface-container-lowest);
  border: 1px solid var(--color-input-border);
  border-radius: var(--radius-md);
  padding: var(--space-sm);
}

@media (min-width: 640px) {
  .project-info-slider .slide {
    flex-basis: calc((100% - var(--space-sm)) / 2);
  }
}

@media (min-width: 1024px) {
  .project-info-slider .slide {
    /* Exactamente 3 tarjetas visibles: descuenta los 2 gaps del track */
    flex-basis: calc((100% - (var(--space-sm) * 2)) / 3);
  }
}

.project-info-slider .slide__icon {
  color: var(--color-on-surface-variant);
  margin-bottom: var(--space-xs);
}

.project-info-slider .slide__label {
  font-size: var(--font-label-sm-size);
  letter-spacing: var(--font-label-sm-tracking);
  text-transform: uppercase;
  color: var(--color-on-surface-variant);
  margin-bottom: 4px;
}

.project-info-slider .slide__value {
  font-size: var(--font-body-md-size);
  font-weight: 600;
  line-height: 1.4;
}

/* ---- Botón "Ir a web oficial" tras el último proyecto ---- */
.official-site-section {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: var(--space-sm);
}

.official-site-section .official-site-btn {
  font-size: 18px;
}

.official-site-section .books-link-btn {
  gap: var(--space-xs);
}

/* ==========================================================================
   Fotógrafos relacionados — grid 4x2 sobre fondo gris claro
   (.related-section, .category-tags__title y .category-explorer son
   compartidos con las páginas de categoría/época — ver base.css)
   ========================================================================== */
.related-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--space-sm);
}

@media (min-width: 768px) {
  .related-grid {
    grid-template-columns: repeat(4, 1fr);
  }
}

.category-tag {
  display: inline-flex;
  align-items: center;
  font-size: 11px;
  color: var(--color-primary);
  padding: 8px 16px;
  border: 2px solid var(--color-primary);
  border-radius: 50px;
  text-decoration: none;
}

.category-tag:hover {
  background-color: var(--color-primary);
  color: var(--color-on-primary);
  transition: 0.8s;
}

.related-card {
  display: block;
}

.related-card__image {
  aspect-ratio: 1 / 1;
  border-radius: var(--radius-lg);
  overflow: hidden;
  background: repeating-linear-gradient(
    135deg,
    var(--color-surface-container-high),
    var(--color-surface-container-high) 8px,
    var(--color-surface-container-highest) 8px,
    var(--color-surface-container-highest) 16px
  );
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: var(--font-body-lg-size);
  font-weight: 700;
  color: var(--color-on-primary-container);
}

.related-card__image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.related-card__name {
  margin-top: var(--space-xs);
  font-size: var(--font-body-md-size);
  font-weight: 600;
}

/* ==========================================================================
   Sección "Artículos relacionados" (ver renderRelatedArticles en profile.js)
   ========================================================================== */
.article-teaser-list {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-sm);
}

@media (min-width: 768px) {
  .article-teaser-list {
    grid-template-columns: repeat(2, 1fr);
  }
}

.article-teaser {
  display: block;
  padding: var(--space-sm);
  border: 1px solid var(--color-outline-variant);
  border-radius: var(--radius-lg);
  transition: box-shadow 0.2s ease, border-color 0.2s ease;
}

.article-teaser:hover {
  box-shadow: var(--shadow-hover);
  border-color: var(--color-outline);
}

.article-teaser__eyebrow {
  font-size: var(--font-label-sm-size);
  font-weight: var(--font-label-sm-weight);
  letter-spacing: var(--font-label-sm-tracking);
  text-transform: uppercase;
  color: var(--color-on-surface-variant);
  margin-bottom: var(--space-xs);
}

.article-teaser__title {
  font-size: var(--font-body-lg-size);
  font-weight: 600;
  line-height: 1.3;
  margin-bottom: var(--space-xs);
}

.article-teaser__excerpt {
  font-size: var(--font-body-md-size);
  line-height: var(--font-body-md-line-height);
  color: var(--color-on-surface-variant);
}

/* ==========================================================================
   Navegación anterior / siguiente dentro del directorio
   ========================================================================== */
.profile-nav-band {
  width: 100%;
  background-color: #e9e9e9;
  margin-top: var(--space-xl);
}

.profile-nav {
  position: relative;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--space-sm);
  padding-block: var(--space-lg);
}

.profile-nav__link {
  display: flex;
  flex-direction: column;
  gap: 4px;
  max-width: 45%;
}

.profile-nav__link--next {
  text-align: right;
  margin-left: auto;
}

.profile-nav__label {
  font-size: var(--font-label-sm-size);
  letter-spacing: var(--font-label-sm-tracking);
  text-transform: uppercase;
  color: var(--color-on-surface-variant);
}

.profile-nav__name {
  font-size: var(--font-body-lg-size);
  font-weight: 600;
}

.profile-nav__link:hover .profile-nav__name {
  text-decoration: underline;
}

/* ---- Botón "ver todos" (icono grid), igual que en la navegación de
   artículos (ver .article-nav__viewall en articles.css): centrado de
   verdad sobre el nav completo, sin depender de los anchos de los enlaces
   anterior/siguiente. ---- */
.profile-nav__viewall {
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  flex-shrink: 0;
  border: 1px solid var(--color-outline-variant);
  border-radius: var(--radius-full);
  color: var(--color-on-surface);
  transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}

.profile-nav__viewall:hover {
  background-color: var(--color-primary);
  border-color: var(--color-primary);
  color: var(--color-on-primary);
}

/* En móvil, si hay botón "ver todos", el nombre anterior/siguiente baja de
   tamaño para dejar sitio al botón centrado (:has() se degrada con
   seguridad si el navegador no lo soporta: simplemente no aprieta). */
@media (max-width: 767px) {
  .profile-nav:has(.profile-nav__viewall) .profile-nav__name {
    font-size: 12px;
  }

  .profile-nav:has(.profile-nav__viewall) .profile-nav__link {
    max-width: 38%;
  }
}

/* ==========================================================================
   Lightbox — popup de la galería del proyecto, con navegación anterior/siguiente
   ========================================================================== */
body.lightbox-locked {
  overflow: hidden;
}

.lightbox-overlay {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: none;
  align-items: center;
  justify-content: center;
  gap: var(--space-lg);
  background-color: rgba(0, 0, 0, 0.92);
  padding: var(--space-sm);
}

.lightbox-overlay.is-open {
  display: flex;
}

.lightbox-stage {
  display: flex;
  flex-direction: column;
  align-items: center;
  max-width: min(1100px, 90vw);
  max-height: 90vh;
}

.lightbox-media {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  opacity: 1;
  transition: opacity 0.18s ease;
}

.lightbox-media.is-fading {
  opacity: 0;
}

.lightbox-media img {
  max-width: 100%;
  max-height: 76vh;
  border-radius: var(--radius-md);
  object-fit: contain;
}

.lightbox-placeholder {
  width: min(640px, 80vw);
  aspect-ratio: 4 / 3;
  border-radius: var(--radius-md);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--color-on-primary);
  font-size: var(--font-headline-md-size);
  font-weight: 700;
  background: repeating-linear-gradient(
    135deg,
    #2a2a2a,
    #2a2a2a 10px,
    #333333 10px,
    #333333 20px
  );
}

.lightbox-caption {
  margin-top: var(--space-sm);
  color: var(--color-on-primary);
  font-size: var(--font-body-md-size);
  font-weight: 600;
  text-align: center;
}

.lightbox-counter {
  margin-top: 4px;
  color: rgba(255, 255, 255, 0.6);
  font-size: var(--font-label-sm-size);
  letter-spacing: var(--font-label-sm-tracking);
  text-transform: uppercase;
}

.lightbox-close {
  position: absolute;
  top: var(--space-sm);
  right: var(--space-sm);
  width: 44px;
  height: 44px;
  border-radius: var(--radius-full);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--color-on-primary);
  background-color: rgba(255, 255, 255, 0.1);
}

.lightbox-close:hover {
  background-color: rgba(255, 255, 255, 0.2);
}

/* Posición fija respecto al overlay (no al tamaño de la imagen mostrada):
   ancladas a media altura del viewport, fuera del flujo de .lightbox-stage. */
.lightbox-arrow {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  flex-shrink: 0;
  width: 52px;
  height: 52px;
  border-radius: var(--radius-full);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: #ffffff;
  background-color: #bbbbbb;
  transition: background-color 0.2s ease;
  z-index: 1;
}

.lightbox-arrow--prev {
  left: var(--space-lg);
}

.lightbox-arrow--next {
  right: var(--space-lg);
}

.lightbox-arrow:hover {
  background-color: #5b5b5b;
}

@media (max-width: 767px) {
  .lightbox-arrow {
    top: auto;
    bottom: var(--space-sm);
    transform: none;
  }
  .lightbox-arrow--prev {
    left: var(--space-sm);
  }
  .lightbox-arrow--next {
    right: var(--space-sm);
  }
}
