@charset "UTF-8";
.fade-up {
  opacity: 0;
  transform: translateY(70px);
}

/* fallback: nếu JS lỗi hoặc trình duyệt chặn, vẫn hiện nội dung bình thường */
html:not(.has-js) .fade-up {
  opacity: 1;
  transform: none;
}

.thu-vien__title,
.thu-vien__subtitle,
.thu-vien__content,
.news-card,
.du-an__head,
.du-an__gallery-main,
.du-an__gallery-grid,
.contact__aside,
.contact__form {
  opacity: 0;
  transform: translateY(70px);
  transition: opacity 1.1s cubic-bezier(0.215, 0.61, 0.355, 1), transform 1.1s cubic-bezier(0.215, 0.61, 0.355, 1);
  will-change: transform, opacity;
}

/* fallback cho các phần tử animation */
html:not(.has-js) .thu-vien__title,
html:not(.has-js) .thu-vien__subtitle,
html:not(.has-js) .thu-vien__content,
html:not(.has-js) .news-card,
html:not(.has-js) .du-an__head,
html:not(.has-js) .du-an__gallery-main,
html:not(.has-js) .du-an__gallery-grid,
html:not(.has-js) .contact__aside,
html:not(.has-js) .contact__form {
  opacity: 1;
  transform: none;
}

/* Animation trigger */
.thu-vien__title.is-visible,
.thu-vien__subtitle.is-visible,
.thu-vien__content.is-visible,
.news-card.is-visible,
.du-an__head.is-visible,
.du-an__gallery-main.is-visible,
.du-an__gallery-grid.is-visible,
.contact__aside.is-visible,
.contact__form.is-visible {
  opacity: 1;
  transform: translateY(0);
}

/* Stagger delays */
.news-card:nth-child(1).is-visible { transition-delay: 0.1s; }
.news-card:nth-child(2).is-visible { transition-delay: 0.28s; }
.news-card:nth-child(3).is-visible { transition-delay: 0.46s; }

.thu-vien__title.is-visible { transition-delay: 0.1s; }
.thu-vien__subtitle.is-visible { transition-delay: 0.28s; }
.thu-vien__content.is-visible { transition-delay: 0.46s; }

.du-an__head.is-visible { transition-delay: 0.1s; }
.du-an__gallery-main.is-visible { transition-delay: 0.28s; }
.du-an__gallery-grid.is-visible { transition-delay: 0.46s; }

.contact__aside.is-visible { transition-delay: 0.1s; }
.contact__form.is-visible { transition-delay: 0.28s; }
