.reveal{opacity:0;transform:translateY(25px);transition:opacity .7s ease,transform .7s ease}
.reveal.active{opacity:1;transform:translateY(0)}
.float-group{position:relative}
.float-group input{transition:border-color .3s ease,box-shadow .3s ease}
.float-group .float-label{position:absolute;left:2.5rem;top:50%;transform:translateY(-50%);font-size:.85rem;color:#9ca3af;pointer-events:none;transition:all .3s ease;padding:0 4px;background:transparent}
.float-group input:focus~.float-label,.float-group input:not(:placeholder-shown)~.float-label{top:0;left:.85rem;transform:translateY(-50%);font-size:.6rem;font-weight:700;color:#FF5630;background:white}
.dark .float-group input:focus~.float-label,.dark .float-group input:not(:placeholder-shown)~.float-label{background:#212B36}
.float-group input:focus{border-color:#FF5630;box-shadow:0 0 0 3px rgba(255,86,48,0.12)}
.float-group.valid input{border-color:#22c55e;box-shadow:0 0 0 3px rgba(34,197,94,0.1)}
.float-group.valid .float-label{color:#22c55e}
.float-group.valid .input-icon{color:#22c55e}
.float-group .check-icon{opacity:0;transform:scale(0);transition:all .3s ease}
.float-group.valid .check-icon{opacity:1;transform:scale(1)}
.float-group.error input{border-color:#ef4444;box-shadow:0 0 0 3px rgba(239,68,68,0.1)}
.float-group.error .float-label{color:#ef4444}
.float-group.error .input-icon{color:#ef4444}
@keyframes shake{0%,100%{transform:translateX(0)}20%,60%{transform:translateX(-6px)}40%,80%{transform:translateX(6px)}}
.shake{animation:shake .4s ease}
.strength-bar{height:4px;border-radius:2px;transition:all .4s ease}
@keyframes pulse-btn{0%,100%{box-shadow:0 10px 25px rgba(255,86,48,0.3)}50%{box-shadow:0 10px 35px rgba(255,86,48,0.5)}}
.btn-pulse:hover{animation:pulse-btn 2s ease-in-out infinite}