/* HanAnHua v117 — consistent lightweight motion on desktop, tablet and phone.
   Loaded last so mobile/touch/reduced-motion browser rules do not accidentally
   make the public site static. Effects are transform/opacity based for smoothness. */

html.motion-force.motion-enabled .site-header{
  animation:v9Header .5s cubic-bezier(.2,.8,.2,1) both!important;
}
html.motion-force.motion-enabled .hero-eyebrow{
  opacity:0;
  animation:v9Up .5s .05s cubic-bezier(.2,.8,.2,1) both!important;
}
html.motion-force.motion-enabled .hero-line{
  opacity:0;
  animation:v9Title .62s cubic-bezier(.18,.86,.22,1) both!important;
}
html.motion-force.motion-enabled .hero-line:nth-child(1){animation-delay:.10s!important}
html.motion-force.motion-enabled .hero-line:nth-child(2){animation-delay:.18s!important}
html.motion-force.motion-enabled .hero-line:nth-child(3){animation-delay:.26s!important}
html.motion-force.motion-enabled .hero-lead{
  opacity:0;
  animation:v9Up .55s .31s cubic-bezier(.2,.8,.2,1) both!important;
}
html.motion-force.motion-enabled .hero-actions{
  opacity:0;
  animation:v9Up .55s .38s cubic-bezier(.2,.8,.2,1) both!important;
}
html.motion-force.motion-enabled .hero-collage{
  opacity:0;
  animation:v9Collage .72s .17s cubic-bezier(.18,.86,.22,1) both!important;
}

/* Continuous hero movement: intentionally subtle and GPU-friendly. */
html.motion-force.motion-enabled .hero-photo-main{
  animation:v9FloatMain 7s 1s ease-in-out infinite!important;
  will-change:transform;
}
html.motion-force.motion-enabled .hero-photo-small{
  animation:v9FloatSmall 6s 1.1s ease-in-out infinite!important;
  will-change:transform;
}
html.motion-force.motion-enabled .hero-badge{
  animation:v9FloatBadge 5s 1s ease-in-out infinite!important;
  will-change:transform;
}
html.motion-force.motion-enabled .orbit-one{animation:spin 22s linear infinite!important}
html.motion-force.motion-enabled .orbit-two{animation:spinReverse 17s linear infinite!important}
html.motion-force.motion-enabled .marquee-track{animation:marquee 22s linear infinite!important}

/* Scroll reveals remain animated on touch devices and narrow responsive windows. */
html.motion-force.motion-enabled .reveal{
  opacity:0;
  transform:translate3d(0,30px,0) scale(.982);
  transition:none!important;
  will-change:opacity,transform;
}
html.motion-force.motion-enabled .reveal.from-left,
html.motion-force.motion-enabled .reveal.from-right{
  transform:translate3d(0,30px,0) scale(.982);
}
html.motion-force.motion-enabled .reveal.is-visible{
  animation:v9Reveal .6s var(--reveal-delay,0ms) cubic-bezier(.18,.86,.22,1) both!important;
}
html.motion-force.motion-enabled .program-card.is-visible figure img{
  animation:v9Image .7s calc(var(--reveal-delay,0ms) + 90ms) ease-out both!important;
}
html.motion-force.motion-enabled .collab-item.is-visible{
  animation:v9Pop .6s var(--reveal-delay,0ms) cubic-bezier(.18,.9,.25,1) both!important;
}
html.motion-force.motion-enabled .field-card.is-visible .field-icon{
  animation:v9Icon .55s calc(var(--reveal-delay,0ms) + 80ms) cubic-bezier(.18,.9,.25,1) both!important;
}
html.motion-force.motion-enabled .journey-step.is-visible figure,
html.motion-force.motion-enabled .gallery-item.is-visible{
  animation:v9Image .7s calc(var(--reveal-delay,0ms) + 70ms) ease-out both!important;
}

/* Owner-supplied illustrations should keep their motion on mobile as well. */
html.motion-force .hero-students-visual{
  animation:hanHeroStudentsEnter .9s .72s cubic-bezier(.18,.82,.22,1) forwards!important;
}
html.motion-force .hero-students-visual img{
  animation:hanHeroStudentsFloat 5.8s 1.8s ease-in-out infinite!important;
}
html.motion-force .journey-prep-stage::before{
  animation:hanJourneyGlow 6.4s ease-in-out infinite!important;
}
html.motion-force .journey-prep-stage::after{
  animation:hanJourneyGlow 6.4s 1.1s ease-in-out infinite reverse!important;
}
html.motion-force .journey-prep-visual.is-visible .journey-prep-art{
  animation:hanJourneyArtIn .82s cubic-bezier(.18,.84,.25,1) both,
            hanJourneyArtFloat 6.8s 1.1s ease-in-out infinite!important;
}
html.motion-force .journey-prep-visual.is-visible .journey-prep-caption{
  animation:hanJourneyCaptionIn .48s cubic-bezier(.2,.9,.25,1.18) both!important;
}
html.motion-force .journey-prep-visual.is-visible .journey-prep-caption-1{animation-delay:.32s!important}
html.motion-force .journey-prep-visual.is-visible .journey-prep-caption-2{animation-delay:.41s!important}
html.motion-force .journey-prep-visual.is-visible .journey-prep-caption-3{animation-delay:.50s!important}
html.motion-force .journey-prep-visual.is-visible .journey-prep-caption-4{animation-delay:.59s!important}

/* Keep map pins alive on touch/mobile; tooltip transitions stay responsive. */
html.motion-force .map-in-view .taiwan-map-hotspot::after{
  animation:hanMapInteractivePulse 2.6s cubic-bezier(.2,.7,.25,1) infinite!important;
}
html.motion-force .taiwan-map-tooltip{
  transition:opacity .2s ease,transform .22s cubic-bezier(.2,.8,.2,1)!important;
}

/* Do not freeze decorative motion merely because a desktop window is being resized.
   We still avoid expensive parallax reads in JS during resize. */
html.motion-force.is-resizing .hero-photo,
html.motion-force.is-resizing .hero-badge,
html.motion-force.is-resizing .hero-badge-2,
html.motion-force.is-resizing .orbit,
html.motion-force.is-resizing .marquee-track{
  animation-play-state:running!important;
}

@media(max-width:820px){
  html.motion-force.motion-enabled .site-header{animation:v8HeaderDrop .62s cubic-bezier(.2,.8,.2,1) both!important}
  html.motion-force.motion-enabled .hero-eyebrow{animation:v8FadeUp .6s .08s cubic-bezier(.2,.8,.2,1) both!important}
  html.motion-force.motion-enabled .hero-line{animation:v8TitleIn .72s cubic-bezier(.18,.86,.22,1) both!important}
  html.motion-force.motion-enabled .hero-line:nth-child(1){animation-delay:.14s!important}
  html.motion-force.motion-enabled .hero-line:nth-child(2){animation-delay:.24s!important}
  html.motion-force.motion-enabled .hero-line:nth-child(3){animation-delay:.34s!important}
  html.motion-force.motion-enabled .hero-lead{animation:v8FadeUp .68s .44s cubic-bezier(.2,.8,.2,1) both!important}
  html.motion-force.motion-enabled .hero-actions{animation:v8FadeUp .68s .54s cubic-bezier(.2,.8,.2,1) both!important}
  html.motion-force.motion-enabled .hero-collage{animation:v8CollageIn .9s .30s cubic-bezier(.18,.86,.22,1) both!important}
  html.motion-force.motion-enabled .hero-photo-main{animation:v8MainFloat 6.8s 1.2s ease-in-out infinite!important}
  html.motion-force.motion-enabled .hero-photo-small{animation:v8SmallFloat 5.8s 1.35s ease-in-out infinite!important}
  html.motion-force.motion-enabled .hero-badge{animation:v8BadgePulse 4s 1.2s ease-in-out infinite!important}
  html.motion-force.motion-enabled .marquee-track{animation:marquee 24s linear infinite!important}
  html.motion-force.motion-enabled .reveal.is-visible{animation:v8MobileReveal .64s var(--reveal-delay,0ms) cubic-bezier(.18,.86,.22,1) both!important}
  html.motion-force.motion-enabled .program-card.is-visible figure img{animation:v8PhotoZoom .82s calc(var(--reveal-delay,0ms) + 90ms) cubic-bezier(.2,.8,.2,1) both!important}
  html.motion-force.motion-enabled .collab-item.is-visible{animation:v8ShapePop .68s var(--reveal-delay,0ms) cubic-bezier(.18,.9,.25,1) both!important}
  html.motion-force.motion-enabled .field-card.is-visible .field-icon{animation:v8IconPop .66s calc(var(--reveal-delay,0ms) + 80ms) cubic-bezier(.18,.9,.25,1) both!important}
  html.motion-force.motion-enabled .journey-step.is-visible figure,
  html.motion-force.motion-enabled .gallery-item.is-visible{animation:v8PhotoReveal .72s calc(var(--reveal-delay,0ms) + 70ms) cubic-bezier(.18,.86,.22,1) both!important}
}

/* Very small screens use the same motion with slightly smaller travel distances. */
@media(max-width:430px){
  html.motion-force.motion-enabled .reveal{transform:translate3d(0,22px,0) scale(.988)}
  html.motion-force.motion-enabled .reveal.from-left,
  html.motion-force.motion-enabled .reveal.from-right{transform:translate3d(0,22px,0) scale(.988)}
}
