@charset "utf-8";
/* ==========================================================================
   motion.css — motion contract (Motion Director owned · do not merge into common.css)
   Rest state = design. Pre-states apply only under html.js-motion (set by common.js)
   and are cleared by .is-in / [data-motion-done]. Motion channel = translate/scale/rotate/opacity/clip-path only.
   ========================================================================== */
html.js-motion [data-motion]{transition:opacity .9s var(--ease-out),translate 1s var(--ease-out),clip-path 1.1s var(--ease-out),scale 1.2s var(--ease-out)}
html.js-motion [data-motion="fade-up"]:not(.is-in){opacity:0;translate:0 4rem}
html.js-motion [data-motion="fade"]:not(.is-in){opacity:0}
html.js-motion [data-motion="line-up"]>span,html.js-motion [data-motion="line-up"].is-solo{display:block}
html.js-motion [data-motion="line-up"]{clip-path:inset(0 0 0 0)}
html.js-motion [data-motion="line-up"]:not(.is-in){clip-path:inset(0 0 100% 0);translate:0 3rem}
html.js-motion [data-motion="img-reveal"]:not(.is-in){clip-path:inset(12% 12% 12% 12%);scale:1.04}
html.js-motion [data-motion="sub-title"]:not(.is-in){opacity:0;translate:0 3rem}
html.js-motion [data-motion="footer-slogan"]:not(.is-in){opacity:0;translate:-6rem 0}
html.js-motion [data-motion-delay="1"]{transition-delay:.1s}
html.js-motion [data-motion-delay="2"]{transition-delay:.2s}
html.js-motion [data-motion-delay="3"]{transition-delay:.3s}
html.js-motion [data-motion-delay="4"]{transition-delay:.4s}
html.js-motion [data-motion][data-motion-done]{transition:none;clip-path:none;translate:none;scale:none}

/* hero : background settles (zoom-out) · title band reveals line by line */
html.js-motion [data-motion="hero-zoom"]{transition:scale 2.4s var(--ease-out)}
html.js-motion [data-motion="hero-zoom"]:not(.is-in){scale:1.08}
html.js-motion [data-motion="line-reveal"]{clip-path:inset(0 0 0 0);transition:clip-path 1s var(--ease-out),translate 1.1s var(--ease-out),opacity .6s ease}
html.js-motion [data-motion="line-reveal"]:not(.is-in){clip-path:inset(0 0 100% 0);translate:0 40%;opacity:0}
html.js-motion [data-motion="line-reveal"][data-motion-delay="1"]{transition-delay:.45s}
html.js-motion [data-motion="line-reveal"][data-motion-delay="2"]{transition-delay:.6s}
html.js-motion [data-motion="line-reveal"][data-motion-delay="3"]{transition-delay:.75s}
html.js-motion [data-motion="line-reveal"]:not([data-motion-delay]){transition-delay:.3s}
@keyframes snow-fall{to{translate:var(--dx,0) 120vh}}
.hero__snow i{animation:snow-fall var(--d,14s) linear var(--delay,0s) infinite}

/* marquee (footer ribbons · partners) */
@keyframes marquee-left{to{translate:-50% 0}}
@keyframes marquee-right{from{translate:-50% 0}to{translate:0 0}}
[data-marquee="left"].is-running{animation:marquee-left var(--dur,40s) linear infinite}
[data-marquee="right"].is-running{animation:marquee-right var(--dur,40s) linear infinite}
.partners__row:hover [data-marquee]{animation-play-state:paused}

@media (prefers-reduced-motion:reduce){
  html.js-motion [data-motion]{transition:none!important;opacity:1!important;translate:none!important;clip-path:none!important;scale:none!important}
  [data-marquee].is-running,.hero__snow i,.fmap__pin.is-active::before{animation:none!important}
}
