/* 움직임만 별도 관리. 텍스트·링크는 모션을 꺼도 모두 보입니다. */
@keyframes drift {
  0%,100% {
    transform:translate3d(0,0,0) rotate(-3deg)
  }
  50% {
    transform:translate3d(0,-12px,0) rotate(-1deg)
  }
}
@keyframes turn {
  to {
    transform:rotate(360deg)
  }
}
@keyframes breathe {
  0%,100% {
    transform:scale(1.02)
  }
  50% {
    transform:scale(1.09)
  }
}
@keyframes ribbon {
  to {
    transform:translateX(-50%)
  }
}
@keyframes nudge {
  0%,100% {
    transform:translateY(-3px)
  }
  50% {
    transform:translateY(4px)
  }
}
@keyframes pulse {
  50% {
    box-shadow:0 0 0 7px #df657722
  }
}
@keyframes panel-in {
  from {
    opacity:0;
    transform:translateY(12px)
  }
  to {
    opacity:1;
    transform:none
  }
}
@keyframes ambient {
  50% {
    transform:translate(-12%,14%) scale(1.1)
  }
}
@keyframes word-breathe {
  0%,18%,82%,100% { transform:scale(1) }
  50% { transform:scale(1.065) }
}
@keyframes sola-float {
  0%,100% { transform:translate3d(0,2px,0) }
  50% { transform:translate3d(0,-4px,0) }
}
.title-emphasis {
  animation:word-breathe 4.8s ease-in-out infinite
}
.emphasis-light {
  animation-delay:-2.4s
}
.scene-solas li {
  animation:sola-float 6.5s ease-in-out var(--sola-delay,0s) infinite
}
@keyframes sola-orbit {
  from { offset-distance:0% }
  to { offset-distance:100% }
}
/* 같은 타원 궤도를 일정 간격으로 공전하며 글자는 수평을 유지합니다. */
@supports(offset-path:ellipse(35% 32% at 50% 42%)) {
  .scene-solas li:nth-child(n) {
    left:0;
    top:0;
    right:auto;
    bottom:auto;
    offset-path:ellipse(35% 32% at 50% 42%);
    offset-anchor:center;
    offset-rotate:0deg;
    offset-distance:var(--orbit-start,0%);
    animation:sola-orbit 75s linear var(--orbit-delay,0s) infinite
  }
  @media(max-width:600px) {
    .scene-solas li:nth-child(n) {
      offset-path:ellipse(35% 28% at 50% 40%)
    }
  }
}
.motion-sleep * {
  animation-play-state:paused!important
}
.scene-art {
  animation:drift 8s ease-in-out infinite
}
.scene-art>img {
  animation:breathe 22s ease-in-out infinite
}
.scene-spark {
  animation:turn 35s linear infinite
}
.spark-two {
  animation-direction:reverse;
  animation-duration:28s
}
.hero-glow {
  animation:ambient 18s ease-in-out infinite
}
.ribbon-track {
  animation:ribbon 32s linear infinite
}
.word-ribbon:hover .ribbon-track {
  animation-play-state:paused
}
.scroll-cue span:last-child {
  animation:nudge 2s ease-in-out infinite
}
.is-live .live-link i {
  animation:pulse 1.6s infinite
}
.theme-orb {
  animation:ambient 16s ease-in-out infinite
}
.jpanel.animate {
  animation:panel-in .45s var(--ease)
}
.motion-ready .reveal {
  opacity:0;
  transform:translateY(32px);
  transition:opacity .9s var(--ease),transform .9s var(--ease);
  transition-delay:var(--delay,0ms)
}
.motion-ready .reveal.in {
  opacity:1;
  transform:none
}
.motion-ready:not(.loaded) .title-line>span {
  transform:translateY(112%)
}
.title-line>span {
  transition:transform 1.2s var(--ease)
}
.title-line:nth-child(2)>span {
  transition-delay:130ms
}
.motion-ready:not(.loaded) .hero-verse,.motion-ready:not(.loaded) .hero-actions {
  opacity:0;
  transform:translateY(15px)
}
.hero-verse,.hero-actions {
  transition:opacity 1s .3s,transform 1s .3s
}
.hero-actions {
  transition-delay:.5s
}
html.motion-paused {
  scroll-behavior:auto
}
.motion-paused *,.motion-paused *::before,.motion-paused *::after {
  animation-play-state:paused!important;
  transition:none!important;
  scroll-behavior:auto!important
}
.motion-paused .reveal {
  opacity:1;
  transform:none
}
.motion-paused .title-line>span {
  transform:none
}
.motion-paused .hero-verse,.motion-paused .hero-actions {
  opacity:1;
  transform:none
}
@media(prefers-reduced-motion:reduce) {
  html {
    scroll-behavior:auto
  }
  *,*::before,*::after {
    animation:none!important;
    transition:none!important;
    scroll-behavior:auto!important
  }
  .motion-ready .reveal,.motion-ready:not(.loaded) .hero-verse,.motion-ready:not(.loaded) .hero-actions {
    opacity:1;
    transform:none
  }
  .motion-ready:not(.loaded) .title-line>span {
    transform:none
  }
}
