/* ============================================================
   Kevin · Motion Layer
   滚动入场 / 首屏入场 / 悬浮微交互 / 高级感过渡
   依赖 kevin-theme.css 的 tokens；须在其余样式之后加载
   ============================================================ */

:root {
  --kv-ease-out: cubic-bezier(0.22, 1, 0.36, 1);
  --kv-ease-soft: cubic-bezier(0.4, 0, 0.2, 1);
  --kv-dur-fast: 200ms;
  --kv-dur: 360ms;
  --kv-dur-reveal: 760ms;
}

/* ================= 滚动入场（增强 kv-fade-up） ================= */
.kv-fade-up {
  opacity: 0;
  transform: translateY(26px) scale(0.992);
  transition:
    opacity var(--kv-dur-reveal) var(--kv-ease-out),
    transform var(--kv-dur-reveal) var(--kv-ease-out);
  transition-delay: var(--kv-delay, 0ms);
}
.kv-fade-up.kv-inview {
  opacity: 1;
  transform: none;
}
.kv-fade-up--left { transform: translateX(-36px); }
.kv-fade-up--right { transform: translateX(36px); }
.kv-fade-up--zoom { transform: scale(0.94); }
.kv-fade-up--left.kv-inview,
.kv-fade-up--right.kv-inview,
.kv-fade-up--zoom.kv-inview { transform: none; }

/* ================= 首屏入场（Hero / Page Hero） ================= */
@keyframes kv-rise-in {
  from { opacity: 0; transform: translateY(26px); }
  to   { opacity: 1; transform: none; }
}
@keyframes kv-zoom-in {
  from { opacity: 0; transform: scale(0.94); }
  to   { opacity: 1; transform: none; }
}
.kv-hero__title  { animation: kv-rise-in 0.9s var(--kv-ease-out) 0.05s both; }
.kv-hero__en     { animation: kv-rise-in 0.9s var(--kv-ease-out) 0.16s both; }
.kv-hero__sub    { animation: kv-rise-in 0.9s var(--kv-ease-out) 0.26s both; }
.kv-hero__cta    { animation: kv-rise-in 0.9s var(--kv-ease-out) 0.36s both; }
.kv-hero__visual { animation: kv-zoom-in 1s var(--kv-ease-out) 0.3s both; }

.kv-page-hero__text h1 { animation: kv-rise-in 0.8s var(--kv-ease-out) 0.05s both; }
.kv-page-hero__en      { animation: kv-rise-in 0.8s var(--kv-ease-out) 0.15s both; }
.kv-page-hero__slogan  { animation: kv-rise-in 0.8s var(--kv-ease-out) 0.25s both; }
.kv-page-hero__visual  { animation: kv-zoom-in 0.9s var(--kv-ease-out) 0.2s both; }

/* ================= 导航 ================= */
.kv-navbar__menu a::after {
  content: "";
  position: absolute;
  left: 50%;
  bottom: -4px;
  width: 20px;
  height: 3px;
  border-radius: 3px;
  background: linear-gradient(90deg, var(--kevin-primary), var(--kevin-primary-light));
  transform: translateX(-50%) scaleX(0);
  opacity: 0;
  transition:
    transform var(--kv-dur) var(--kv-ease-out),
    opacity var(--kv-dur) var(--kv-ease-out);
}
.kv-navbar__menu a:hover::after,
.kv-navbar__menu a.active::after {
  transform: translateX(-50%) scaleX(1);
  opacity: 1;
}

@keyframes kv-menu-in {
  from { opacity: 0; transform: translateY(-10px); }
  to   { opacity: 1; transform: none; }
}
.kv-mobile-menu.open { animation: kv-menu-in 0.3s var(--kv-ease-out) both; }
.kv-mobile-menu a { transition: color var(--kv-dur-fast) var(--kv-ease-soft), padding-left var(--kv-dur) var(--kv-ease-out); }
.kv-mobile-menu a:hover { padding-left: 14px; }

/* ================= 按钮 ================= */
.kv-btn--primary {
  position: relative;
  overflow: hidden;
}
.kv-btn--primary::after {
  content: "";
  position: absolute;
  top: -20%;
  bottom: -20%;
  left: -70%;
  width: 45%;
  background: linear-gradient(100deg, transparent, rgba(255, 255, 255, 0.32), transparent);
  transform: skewX(-18deg);
  transition: left 0.65s var(--kv-ease-out);
  pointer-events: none;
}
.kv-btn--primary:hover::after { left: 130%; }

/* ================= 卡片悬浮微交互 ================= */
.kv-course-card,
.kv-campus-card,
.kv-honor-card,
.kv-mission-card,
.kv-prog-card,
.kv-pd-feature {
  transition:
    transform var(--kv-dur) var(--kv-ease-out),
    box-shadow var(--kv-dur) var(--kv-ease-out);
}
.kv-course-card:hover,
.kv-campus-card:hover,
.kv-honor-card:hover {
  transform: translateY(-6px);
  box-shadow: var(--kevin-shadow-lg);
}
.kv-mission-card:hover { transform: translateY(-4px) scale(1.012); }

.kv-course-card__cover img,
.kv-honor-card__img img,
.kv-campus-card__cover img,
.kv-story__media img {
  transition: transform 0.9s var(--kv-ease-out);
}
.kv-course-card:hover .kv-course-card__cover img { transform: scale(1.06); }
.kv-honor-card:hover .kv-honor-card__img img { transform: scale(1.05); }
.kv-story__media:hover img { transform: scale(1.03); }

/* ================= 数据条 ================= */
.kv-stats__item { transition: transform var(--kv-dur) var(--kv-ease-out); }
.kv-stats__item:hover { transform: translateY(-4px); }

/* ================= 筛选胶囊 ================= */
.kv-chip { transition: all var(--kv-dur-fast) var(--kv-ease-soft); }
.kv-chip:hover { transform: translateY(-2px); }

/* ================= 悬浮咨询 ================= */
.kv-floating a,
.kv-floating button {
  transition:
    transform var(--kv-dur) var(--kv-ease-out),
    background-color var(--kv-dur-fast) var(--kv-ease-soft),
    color var(--kv-dur-fast) var(--kv-ease-soft);
}
.kv-floating a:hover,
.kv-floating button:hover { transform: translateX(-4px); }

/* ================= 页脚 ================= */
.kv-footer__col a {
  display: inline-block;
  transition:
    color var(--kv-dur-fast) var(--kv-ease-soft),
    transform var(--kv-dur) var(--kv-ease-out);
}
.kv-footer__col a:hover { transform: translateX(4px); }

/* ================= 表单聚焦 ================= */
.kv-form__field input,
.kv-form__field select,
.kv-form__field textarea {
  transition:
    border-color var(--kv-dur-fast) var(--kv-ease-soft),
    box-shadow var(--kv-dur-fast) var(--kv-ease-soft);
}
.kv-form__field input:focus,
.kv-form__field select:focus,
.kv-form__field textarea:focus {
  box-shadow: 0 0 0 4px rgba(108, 85, 245, 0.12);
}

/* ================= 触屏设备：关闭 hover 位移 ================= */
@media (hover: none) {
  .kv-course-card:hover,
  .kv-campus-card:hover,
  .kv-honor-card:hover,
  .kv-mission-card:hover { transform: none; }
  .kv-course-card:hover .kv-course-card__cover img,
  .kv-honor-card:hover .kv-honor-card__img img,
  .kv-campus-card:hover .kv-campus-card__cover img,
  .kv-story__media:hover img { transform: none; }
  .kv-btn--primary::after { display: none; }
  .kv-chip:hover { transform: none; }
}

/* ================= 减弱动效偏好 ================= */
@media (prefers-reduced-motion: reduce) {
  .kv-fade-up,
  .kv-fade-up--left,
  .kv-fade-up--right,
  .kv-fade-up--zoom {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
  }
  .kv-hero__title,
  .kv-hero__en,
  .kv-hero__sub,
  .kv-hero__cta,
  .kv-hero__visual,
  .kv-page-hero__text h1,
  .kv-page-hero__en,
  .kv-page-hero__slogan,
  .kv-page-hero__visual,
  .kv-mobile-menu.open {
    animation: none !important;
  }
  .kv-btn--primary::after { display: none; }
}
