@keyframes euncoach-rise {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: none; }
}

@keyframes euncoach-draw {
  from { stroke-dashoffset: 26; }
  to { stroke-dashoffset: 0; }
}

@keyframes euncoach-pop {
  0% { opacity: 0; transform: scale(.85); }
  60% { transform: scale(1.04); }
  100% { opacity: 1; transform: scale(1); }
}

@keyframes euncoach-confetti {
  0% { opacity: 0; transform: translate(0, 0) scale(.6); }
  20% { opacity: 1; }
  100% { opacity: 0; transform: translate(var(--dx), var(--dy)) scale(1); }
}

@keyframes euncoach-ring {
  0% { opacity: .55; transform: scale(.7); }
  100% { opacity: 0; transform: scale(1.9); }
}

@keyframes euncoach-spin {
  to { transform: rotate(360deg); }
}

:root {
  --euncoach-progress-duration: .8s;
  --euncoach-progress-easing: cubic-bezier(.2, .8, .2, 1);
  --euncoach-count-rank-step: 70ms;
  --euncoach-count-score-step: 22ms;
  --euncoach-count-score-increment: 3;
  --euncoach-count-quantity-step: 140ms;
}

.euncoach-rise {
  animation: euncoach-rise .34s ease both;
}

.euncoach-scroll-rise {
  animation: euncoach-rise .6s linear both;
  animation-timeline: view();
  animation-range: entry 0% entry 45%;
}

.euncoach-press {
  transition: transform .12s ease;
}

.euncoach-press:active {
  transform: scale(.98);
}

.euncoach-complete-mark {
  animation: euncoach-pop .32s ease both;
}

.euncoach-complete-mark path {
  animation: euncoach-draw .4s ease .12s both;
  stroke-dasharray: 26;
}

.euncoach-celebration-ring {
  animation: euncoach-ring .8s ease both;
}

.euncoach-confetti:nth-child(1) { animation: euncoach-confetti .8s ease .04s both; }
.euncoach-confetti:nth-child(2) { animation: euncoach-confetti .86s ease .08s both; }
.euncoach-confetti:nth-child(3) { animation: euncoach-confetti .93s ease .12s both; }
.euncoach-confetti:nth-child(4) { animation: euncoach-confetti 1s ease .16s both; }

.euncoach-progress-fill {
  transition: transform var(--euncoach-progress-duration) var(--euncoach-progress-easing);
}

.euncoach-spinner {
  box-sizing: border-box;
  border: 2.5px solid #E5E8EB;
  border-top-color: #0B5BD3;
  border-radius: 50%;
  animation: euncoach-spin .8s linear infinite;
}

.euncoach-spinner-lg {
  border-width: 3px;
}

.euncoach-fold-content {
  animation: none;
  transition: none;
}

@media (prefers-reduced-motion: reduce) {
  /* view() 타임라인은 duration만 줄여도 auto 보간을 계속한다. 기본 .euncoach-scroll-rise는
     이미 완성값(opacity 1·transform none)이라 타임라인과 이름을 모두 끄면 정적으로 읽힌다. */
  .euncoach-scroll-rise {
    animation-name: none !important;
    animation-timeline: none !important;
    opacity: 1;
    transform: none;
  }

  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
    transition-duration: .01ms !important;
  }
}
