/* ============================================
   增强版懒加载样式
   提供平滑的加载动画和占位符效果
   ============================================ */

/* 懒加载图片基础样式（仅对 data-src 方式隐藏，避免原生 lazy 图片被误隐藏）*/
img[data-src] {
  opacity: 0;
  transition: opacity 0.4s ease-in-out;
  background-color: var(--lazy-placeholder-bg, #f2f2f2);
  min-height: 100px; /* 防止布局抖动 */
}

/* 已加载的图片 */
img.lazy-loaded,
img.loaded {
  opacity: 1;
}

/* 加载失败的图片 */
img.lazy-error {
  opacity: 0.5;
  background-color: #f8f8f8;
  background-image: repeating-linear-gradient(
    45deg,
    transparent,
    transparent 10px,
    rgba(0, 0, 0, 0.05) 10px,
    rgba(0, 0, 0, 0.05) 20px
  );
}

/* 占位符样式 - 骨架屏效果 */
.img-placeholder,
[data-bg]:not(.lazy-loaded) {
  background-color: var(--lazy-placeholder-bg, #f2f2f2);
  position: relative;
  overflow: hidden;
  min-height: 200px;
}

/* 闪烁动画（骨架屏效果） */
.img-placeholder::before,
[data-bg]:not(.lazy-loaded)::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: linear-gradient(
    90deg,
    rgba(255, 255, 255, 0) 0%,
    rgba(255, 255, 255, 0.3) 50%,
    rgba(255, 255, 255, 0) 100%
  );
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
  z-index: 1;
}

/* 深色模式下的占位符 */
.dark-theme .img-placeholder,
.dark-theme [data-bg]:not(.lazy-loaded) {
  background-color: var(--lazy-placeholder-bg-dark, #2a2a2a);
}

.dark-theme .img-placeholder::before,
.dark-theme [data-bg]:not(.lazy-loaded)::before {
  background: linear-gradient(
    90deg,
    rgba(255, 255, 255, 0) 0%,
    rgba(255, 255, 255, 0.1) 50%,
    rgba(255, 255, 255, 0) 100%
  );
}

@keyframes shimmer {
  0% {
    background-position: -200% 0;
  }
  100% {
    background-position: 200% 0;
  }
}

/* iframe 懒加载样式 */
iframe[data-src] {
  background-color: var(--lazy-placeholder-bg, #f2f2f2);
  border: none;
  opacity: 0;
  transition: opacity 0.3s ease-in;
}

iframe.lazy-loaded {
  opacity: 1;
}

/* 背景图片懒加载 */
[data-bg] {
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  transition: opacity 0.4s ease-in-out;
}

[data-bg].lazy-loaded {
  opacity: 1;
}

/* 列表懒加载 - 淡入动画 */
[data-lazy-section] {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 0.5s ease-out, transform 0.5s ease-out;
}

[data-lazy-section].lazy-loaded {
  opacity: 1;
  transform: translateY(0);
}

/* 博客文章中的图片 */
.blog-body img,
.blog-content img,
article img {
  max-width: 100%;
  height: auto;
  display: block;
  margin: 1.5rem auto;
  border-radius: 4px;
}

/* 图片容器 */
.image-container {
  position: relative;
  overflow: hidden;
  background-color: var(--lazy-placeholder-bg, #f2f2f2);
  border-radius: 4px;
}

.image-container img {
  display: block;
  width: 100%;
  height: auto;
}

/* 防止内容闪烁（FOUC - Flash of Unstyled Content） */
.lazy-loading-fallback {
  visibility: hidden;
}

.lazy-loading-fallback.lazy-loaded {
  visibility: visible;
}

/* 响应式优化 */
@media (prefers-reduced-motion: reduce) {
  img[data-src],
  img[loading="lazy"],
  [data-bg],
  [data-lazy-section],
  iframe[data-src] {
    transition: none;
    animation: none;
  }
  
  .img-placeholder::before,
  [data-bg]:not(.lazy-loaded)::before {
    display: none;
  }
}

/* 打印时禁用懒加载效果 */
@media print {
  img[data-src] {
    opacity: 1;
  }
  
  [data-bg] {
    opacity: 1;
  }
  
  .img-placeholder::before,
  [data-bg]::before {
    display: none;
  }
}
