@keyframes hero-drift {
  0%, 100% { transform: scale(1.05) translate(0, 0); }
  50% { transform: scale(1.1) translate(-1.5%, -1%); }
}

@keyframes pulse-glow {
  0%, 100% { transform: scale(1); opacity: .55; }
  50% { transform: scale(1.15); opacity: 1; }
}

@keyframes pulse-ring {
  0% { transform: scale(1); opacity: .7; }
  100% { transform: scale(1.5); opacity: 0; }
}

@keyframes ripple {
  to { transform: scale(3); opacity: 0; }
}

@keyframes hero-split-zoom {
  from { transform: scale(1.12); }
  to { transform: scale(1); }
}

@keyframes hero-fade-in {
  from { opacity: 0; }
  to { opacity: .85; }
}

@keyframes hero-fade-up {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes hero-line-up {
  from { transform: translateY(105%); }
  to { transform: translateY(0); }
}

.reveal { opacity: 0; transform: translateY(24px); transition: opacity .7s cubic-bezier(.16,1,.3,1), transform .7s cubic-bezier(.16,1,.3,1); }
.reveal.is-visible { opacity: 1; transform: translateY(0); }

.reveal-left { opacity: 0; transform: translateX(-40px); transition: opacity .7s cubic-bezier(.16,1,.3,1), transform .7s cubic-bezier(.16,1,.3,1); }
.reveal-left.is-visible { opacity: 1; transform: translateX(0); }

.reveal-right { opacity: 0; transform: translateX(40px); transition: opacity .7s cubic-bezier(.16,1,.3,1), transform .7s cubic-bezier(.16,1,.3,1); }
.reveal-right.is-visible { opacity: 1; transform: translateX(0); }

.reveal-scale { opacity: 0; transform: scale(.94); transition: opacity .6s cubic-bezier(.16,1,.3,1), transform .6s cubic-bezier(.16,1,.3,1); }
.reveal-scale.is-visible { opacity: 1; transform: scale(1); }

.stagger > * { opacity: 0; transform: translateY(20px); transition: opacity .6s ease, transform .6s ease; }
.stagger.is-visible > *:nth-child(1) { transition-delay: .05s; }
.stagger.is-visible > *:nth-child(2) { transition-delay: .12s; }
.stagger.is-visible > *:nth-child(3) { transition-delay: .19s; }
.stagger.is-visible > *:nth-child(4) { transition-delay: .26s; }
.stagger.is-visible > *:nth-child(5) { transition-delay: .33s; }
.stagger.is-visible > *:nth-child(6) { transition-delay: .40s; }
.stagger.is-visible > * { opacity: 1; transform: translateY(0); }

/* 헤딩 언더라인 리빌 */
.heading-line { position: relative; display: inline-block; }
.heading-line::after {
  content: ''; position: absolute; left: 0; bottom: -.3rem; height: 2px; width: 0;
  background: var(--accent); transition: width .8s cubic-bezier(.16,1,.3,1);
}
.heading-line.is-visible::after { width: 100%; }

/* 커서 호버 강조(크기·위치는 JS 인라인 transform이 함께 계산, 여기선 색·투명도만) */
.cursor-ring.hover { border-color: var(--accent); }
.cursor-dot.hover { opacity: 0; }

@media (prefers-reduced-motion: reduce) {
  .reveal, .reveal-left, .reveal-right, .reveal-scale, .stagger > *,
  .hero-split__img img, .hero-full__bg img, .call-cta::before,
  .float-tel::before, .heading-line::after, .btn::before {
    transition: none !important; animation: none !important;
  }
}

@media print {
  .site-nav, .mob-nav, #mob-bar, .float-cta, .back-top, .progress-bar,
  .cursor-dot, .cursor-ring, .parallax-bg { display: none !important; }
}

@media (hover: none) {
  .cursor-dot, .cursor-ring { display: none !important; }
}
