/* ===== 骨架屏占位 + 图片懒加载（正方形比例） ===== */
.card-img-placeholder {
  position: relative;
  overflow: hidden;
  background: #f0f0f0;
  padding-bottom: 100%; /* 1:1 正方形 */
}
.card-img-placeholder::before {
  content: '';
  position: absolute;
  top: 0;
  left: -100%;
  width: 100%;
  height: 100%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.6), transparent);
  animation: skeleton-shimmer 1.5s infinite;
  z-index: 1;
  pointer-events: none;
}
@keyframes skeleton-shimmer {
  0% { left: -100%; }
  100% { left: 100%; }
}
.card-img-placeholder img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  opacity: 0;
  transition: opacity 0.3s ease;
  z-index: 2;
}
.card-img-placeholder img.loaded {
  opacity: 1;
}
