/* =========================================================================
   Nam Anh Logistics - lớp hiển thị ảnh (skeleton / fade-in / chống CLS)
   Chỉ liên quan tới việc HIỂN THỊ ẢNH, không ảnh hưởng logic nghiệp vụ.
   ========================================================================= */

/* -------------------------------------------------------------------------
   1. KHUNG GIỮ CHỖ (skeleton)
   Bọc ảnh trong .img-box: khung luôn chiếm đúng chỗ + có hiệu ứng shimmer
   nhấp nháy nhẹ trong lúc ảnh đang tải, nên không bao giờ thấy ô trắng trống.
   ------------------------------------------------------------------------- */
.img-box {
  position: relative;
  overflow: hidden;
  background-color: #e6e8ea; /* = surface-variant của theme */
}

.img-box::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(
    90deg,
    rgba(255, 255, 255, 0) 0%,
    rgba(255, 255, 255, 0.55) 50%,
    rgba(255, 255, 255, 0) 100%
  );
  transform: translateX(-100%);
  animation: img-shimmer 1.3s ease-in-out infinite;
}

/* Tải xong -> tắt shimmer và bỏ nền xám để ảnh trong suốt vẫn đúng */
.img-box.is-loaded {
  background-color: transparent;
}
.img-box.is-loaded::after {
  content: none;
  animation: none;
}

@keyframes img-shimmer {
  to {
    transform: translateX(100%);
  }
}

/* -------------------------------------------------------------------------
   2. FADE-IN
   Ảnh có [data-fade] sẽ mờ dần hiện ra khi đã decode xong, tránh cảm giác
   ảnh "nhảy" đột ngột vào layout.
   ------------------------------------------------------------------------- */
img[data-fade] {
  opacity: 0;
  transition: opacity 0.4s ease;
}

img[data-fade].is-loaded {
  opacity: 1;
}

/* Ảnh đã có sẵn trong cache (complete ngay khi script chạy): hiện luôn,
   không transition -> quay lại trang / re-render không bị nháy lại. */
img[data-fade].is-cached {
  opacity: 1;
  transition: none;
}

/* -------------------------------------------------------------------------
   3. ẢNH LỖI -> FALLBACK
   ------------------------------------------------------------------------- */
img.img-fallback {
  object-fit: contain !important;
  padding: 8%;
  background-color: #f1f3f4;
}

/* -------------------------------------------------------------------------
   4. <picture> phải là block khi nằm trong flex/grid, nếu không nó bị co lại
   theo inline-box và làm ảnh sai kích thước.
   ------------------------------------------------------------------------- */
picture {
  display: block;
}

/* -------------------------------------------------------------------------
   5. Tôn trọng thiết lập giảm chuyển động của người dùng
   ------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  .img-box::after {
    animation: none;
  }
  img[data-fade] {
    transition: none;
    opacity: 1;
  }
}
