:root{--fx-distance-sm:16px;--fx-distance-md:32px;--fx-distance-lg:64px;--fx-duration-fast:0.4s;--fx-duration-base:0.8s;--fx-duration-slow:1.2s;--fx-ease:cubic-bezier(0.22, 1, 0.36, 1)}.is-hidden{opacity:0;pointer-events:none}.is-visible{opacity:1;pointer-events:auto}.fx-up{transform:translateY(var(--fx-distance-md));transition:opacity var(--fx-duration-base) var(--fx-ease),transform var(--fx-duration-base) var(--fx-ease)}.fx-down{transform:translateY(calc(var(--fx-distance-md) * -1));transition:opacity var(--fx-duration-base) var(--fx-ease),transform var(--fx-duration-base) var(--fx-ease)}.fx-left{transform:translateX(calc(var(--fx-distance-lg) * -1));transition:opacity var(--fx-duration-slow) var(--fx-ease),transform var(--fx-duration-slow) var(--fx-ease)}.fx-right{transform:translateX(var(--fx-distance-lg));transition:opacity var(--fx-duration-slow) var(--fx-ease),transform var(--fx-duration-slow) var(--fx-ease)}.is-visible.fx-down,.is-visible.fx-left,.is-visible.fx-right,.is-visible.fx-up{transform:translate(0)}.fx-fade{transition:opacity var(--fx-duration-base) var(--fx-ease)}.fx-scale{transform:scale(.96);transition:opacity var(--fx-duration-base) var(--fx-ease),transform var(--fx-duration-base) var(--fx-ease)}.is-visible.fx-scale{transform:scale(1)}.fx-delay-1{transition-delay:0.1s}.fx-delay-2{transition-delay:0.2s}.fx-delay-3{transition-delay:0.3s}.fx-delay-4{transition-delay:0.4s}.fx-delay-5{transition-delay:0.5s}.fx-hover-rise{transition:transform var(--fx-duration-fast) var(--fx-ease)}.fx-hover-rise:hover{transform:translateY(-4px)}.fx-hover-fade{transition:opacity var(--fx-duration-fast) ease}.fx-hover-fade:hover{opacity:.75}.fx-image-overlay{position:relative;overflow:hidden}.fx-image-overlay img{display:block;opacity:0;transform:translateX(-40px);transition:opacity var(--fx-duration-slow) var(--fx-ease),transform var(--fx-duration-slow) var(--fx-ease)}.is-visible .fx-image-overlay img{opacity:1;transform:translateX(0)}.fx-text-block{transition:opacity var(--fx-duration-base) var(--fx-ease),transform var(--fx-duration-base) var(--fx-ease);transform:translateY(24px)}.is-visible .fx-text-block{opacity:1;transform:translateY(0)}@media (prefers-reduced-motion:reduce){*,::after,::before{animation:none!important;transition:none!important;transform:none!important}}