/**
 * 加载体验优化 (loading.css)
 * 顶部加载条、骨架屏、加载动画
 */

/* ========== 顶部加载条 ========== */
.loading-bar {
  position: fixed;
  top: 0;
  left: 0;
  width: 0%;
  height: 3px;
  background: linear-gradient(90deg, #0096D6, #00b4d8, #0096D6);
  background-size: 200% 100%;
  z-index: 9999;
  transition: width 0.3s ease;
  animation: loading-gradient 2s ease infinite;
}

@keyframes loading-gradient {
  0% {
    background-position: 0% 50%;
  }
  50% {
    background-position: 100% 50%;
  }
  100% {
    background-position: 0% 50%;
  }
}

.loading-bar.active {
  width: 70%;
}

.loading-bar.complete {
  width: 100%;
  opacity: 0;
  transition: width 0.3s ease, opacity 0.5s ease 0.3s;
}

/* ========== 骨架屏（产品网格） ========== */
.skeleton-card {
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: skeleton-loading 1.5s infinite;
  border-radius: 8px;
  height: 450px;
  margin-bottom: 20px;
}

@keyframes skeleton-loading {
  0% {
    background-position: 200% 0;
  }
  100% {
    background-position: -200% 0;
  }
}

/* 骨架屏文本行 */
.skeleton-text {
  height: 16px;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: skeleton-loading 1.5s infinite;
  border-radius: 4px;
  margin-bottom: 10px;
}

.skeleton-text.title {
  height: 24px;
  width: 60%;
  margin: 0 auto 20px;
}

.skeleton-text.short {
  width: 40%;
}

.skeleton-text.long {
  width: 80%;
}

/* ========== 图片加载淡入 ========== */
/* 仅对设置了lazy-load类的图片应用淡入效果 */
img.lazy-load {
  opacity: 0;
  transition: opacity 0.3s ease;
}

img.lazy-load.loaded {
  opacity: 1;
}

/* 图片加载占位符 */
img.lazy-load:not(.loaded) {
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: skeleton-loading 1.5s infinite;
}

/* ========== 页面加载动画 ========== */
/* 全屏加载覆盖层 */
.page-loader {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: #fff;
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 99999;
  transition: opacity 0.5s ease, visibility 0.5s ease;
}

.page-loader.hidden {
  opacity: 0;
  visibility: hidden;
}

/* 加载动画 - 旋转圆环 */
.loader-spinner {
  width: 50px;
  height: 50px;
  border: 4px solid #f3f3f3;
  border-top: 4px solid #0096D6;
  border-radius: 50%;
  animation: spin 1s linear infinite;
}

@keyframes spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

/* 加载动画 - 脉冲点 */
.loader-dots {
  display: flex;
  gap: 8px;
}

.loader-dots span {
  width: 12px;
  height: 12px;
  background: #0096D6;
  border-radius: 50%;
  animation: pulse 1.4s ease-in-out infinite;
}

.loader-dots span:nth-child(2) {
  animation-delay: 0.2s;
}

.loader-dots span:nth-child(3) {
  animation-delay: 0.4s;
}

@keyframes pulse {
  0%,
  80%,
  100% {
    opacity: 0.3;
    transform: scale(0.8);
  }
  40% {
    opacity: 1;
    transform: scale(1);
  }
}

/* ========== 内容懒加载淡入 ========== */
.lazy-content {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}

.lazy-content.visible {
  opacity: 1;
  transform: translateY(0);
}

/* ========== Modal 加载状态 ========== */
.modal-loading {
  text-align: center;
  padding: 40px 20px;
}

.modal-loading .loader-spinner {
  margin: 0 auto 20px;
}

.modal-loading p {
  color: #666;
  font-size: 14px;
}

/* ========== 按钮加载状态 ========== */
.btn.loading {
  position: relative;
  color: transparent;
  pointer-events: none;
}

.btn.loading:after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  width: 16px;
  height: 16px;
  margin-top: -8px;
  margin-left: -8px;
  border: 2px solid rgba(255, 255, 255, 0.3);
  border-top-color: #fff;
  border-radius: 50%;
  animation: spin 0.6s linear infinite;
}

/* ========== 进度条 ========== */
.progress-bar-modern {
  width: 100%;
  height: 4px;
  background: #ecf0f1;
  border-radius: 2px;
  overflow: hidden;
  margin: 20px 0;
}

.progress-bar-modern .progress-fill {
  height: 100%;
  background: linear-gradient(90deg, #0096D6, #00b4d8);
  border-radius: 2px;
  transition: width 0.3s ease;
  position: relative;
}

.progress-bar-modern .progress-fill:after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: linear-gradient(
    90deg,
    transparent,
    rgba(255, 255, 255, 0.3),
    transparent
  );
  animation: shimmer 2s infinite;
}

@keyframes shimmer {
  0% {
    transform: translateX(-100%);
  }
  100% {
    transform: translateX(100%);
  }
}

/* ========== 内容占位符 ========== */
.content-placeholder {
  padding: 20px;
}

.content-placeholder .skeleton-avatar {
  width: 60px;
  height: 60px;
  border-radius: 50%;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: skeleton-loading 1.5s infinite;
  margin-bottom: 15px;
}

.content-placeholder .skeleton-title {
  height: 20px;
  width: 70%;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: skeleton-loading 1.5s infinite;
  border-radius: 4px;
  margin-bottom: 10px;
}

.content-placeholder .skeleton-text {
  height: 14px;
  background: linear-gradient(90deg, #f0f0f0 25%, #e0e0e0 50%, #f0f0f0 75%);
  background-size: 200% 100%;
  animation: skeleton-loading 1.5s infinite;
  border-radius: 4px;
  margin-bottom: 8px;
}

.content-placeholder .skeleton-text:last-child {
  width: 60%;
}

/* ========== 滚动触发动画 ========== */
.scroll-reveal {
  opacity: 0;
  transform: translateY(30px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}

.scroll-reveal.revealed {
  opacity: 1;
  transform: translateY(0);
}

/* 延迟动画 */
.scroll-reveal.delay-1 {
  transition-delay: 0.1s;
}

.scroll-reveal.delay-2 {
  transition-delay: 0.2s;
}

.scroll-reveal.delay-3 {
  transition-delay: 0.3s;
}

/* ========== 移动端优化 ========== */
@media (max-width: 767px) {
  .loading-bar {
    height: 2px;
  }

  .skeleton-card {
    height: 350px;
  }

  .page-loader .loader-spinner {
    width: 40px;
    height: 40px;
  }

  .scroll-reveal {
    /* 移动端减少动画以提升性能 */
    transform: translateY(15px);
  }
}

/* ========== Reduced Motion 支持 ========== */
/* 为有运动偏好的用户禁用动画 */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }

  .loading-bar,
  .skeleton-card,
  .skeleton-text,
  img:not(.loaded),
  .loader-spinner,
  .loader-dots span,
  .scroll-reveal {
    animation: none !important;
  }
}

/* ========== 打印样式优化 ========== */
@media print {
  .loading-bar,
  .page-loader,
  .skeleton-card,
  .skeleton-text {
    display: none !important;
  }

  img {
    opacity: 1 !important;
  }
}
