.animate-on-scroll{opacity:0;transition:all .5s ease-out}.animate-on-scroll.animate{opacity:1;transform:translateY(0) translateX(0) scale(1) rotate(0deg)}.fade-up{transform:translateY(30px)}.slide-in-right{transform:translateX(60px);animation:slideInRight .4s ease-out forwards}@keyframes slideInRight{0%{transform:translateX(60px);opacity:0}to{transform:translateX(0);opacity:1}}.slide-in-left{transform:translateX(-60px)}.zoom-in{transform:scale(.9)}.review-card{transition:all .3s ease}.review-card:hover{transform:translateY(-10px);box-shadow:0 10px 25px -5px rgba(0,0,0,.1),0 10px 10px -5px rgba(0,0,0,.04)}.card-float{animation:float 6s ease-in-out infinite}@keyframes float{0%{transform:translateY(0)}50%{transform:translateY(-15px)}to{transform:translateY(0)}}.card-shine{position:relative;overflow:hidden}.card-shine:after{content:"";position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:linear-gradient(to bottom right,rgba(255,255,255,0),rgba(255,255,255,.1) 50%,rgba(255,255,255,0));transform:rotate(30deg);animation:shine 6s ease-in-out infinite}@keyframes shine{0%{transform:translateX(-100%) rotate(30deg)}20%,to{transform:translateX(100%) rotate(30deg)}}.pulse{animation:pulse 2s infinite}@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(99,102,241,.4)}70%{box-shadow:0 0 0 10px rgba(99,102,241,0)}to{box-shadow:0 0 0 0 rgba(99,102,241,0)}}.typing-effect-shorter{overflow:hidden;border-right:2px solid #6366f1;white-space:nowrap;margin:0 auto;width:0;animation:typingShorter 1.5s steps(20) .5s forwards,blink-caret .75s step-end infinite}@keyframes typingShorter{0%{width:0}to{width:100%}}@keyframes blink-caret{0%,to{border-color:transparent}50%{border-color:#6366f1}}.flip-in{transform:rotateY(90deg)}.flip-in.animate{transform:rotateY(0deg);transition:transform .6s cubic-bezier(.175,.885,.32,1.275)}.validate-button{position:relative;overflow:hidden;transition:all .3s ease}.validate-button:hover{transform:translateY(-2px);box-shadow:0 4px 8px rgba(99,102,241,.2)}.validate-button.clicked{animation:buttonClick .4s forwards}@keyframes buttonClick{0%{transform:scale(1)}50%{transform:scale(.95);background-color:#4f46e5}to{transform:scale(1);background-color:#10b981}}.notification-fade-in{animation:notificationFadeIn .4s ease-out forwards}@keyframes notificationFadeIn{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.validate-button-appear{opacity:0;transform:translateY(10px);animation:validateAppear .4s ease-out 1s forwards,validatePulse 1.5s 1s infinite}@keyframes validateAppear{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes validatePulse{0%{box-shadow:0 0 0 0 rgba(99,102,241,.7)}70%{box-shadow:0 0 0 10px rgba(99,102,241,0)}to{box-shadow:0 0 0 0 rgba(99,102,241,0)}}