/* ========== BismillahCSS Animations ========== */

/* Fade Animations */
.bismillah-fade-in {
  animation: bismillahFadeIn 0.5s ease-in-out forwards;
}

.bismillah-fade-out {
  animation: bismillahFadeOut 0.5s ease-in-out forwards;
}

@keyframes bismillahFadeIn {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

@keyframes bismillahFadeOut {
  from {
    opacity: 1;
  }

  to {
    opacity: 0;
  }
}

/* Slide Animations */
.bismillah-slide-in-up {
  animation: bismillahSlideInUp 0.5s ease-out forwards;
}

.bismillah-slide-in-down {
  animation: bismillahSlideInDown 0.5s ease-out forwards;
}

.bismillah-slide-in-left {
  animation: bismillahSlideInLeft 0.5s ease-out forwards;
}

.bismillah-slide-in-right {
  animation: bismillahSlideInRight 0.5s ease-out forwards;
}

@keyframes bismillahSlideInUp {
  from {
    transform: translateY(30px);
    opacity: 0;
  }

  to {
    transform: translateY(0);
    opacity: 1;
  }
}

@keyframes bismillahSlideInDown {
  from {
    transform: translateY(-30px);
    opacity: 0;
  }

  to {
    transform: translateY(0);
    opacity: 1;
  }
}

@keyframes bismillahSlideInLeft {
  from {
    transform: translateX(-30px);
    opacity: 0;
  }

  to {
    transform: translateX(0);
    opacity: 1;
  }
}

@keyframes bismillahSlideInRight {
  from {
    transform: translateX(30px);
    opacity: 0;
  }

  to {
    transform: translateX(0);
    opacity: 1;
  }
}

/* Scale Animations */
.bismillah-scale-in {
  animation: bismillahScaleIn 0.5s ease-out forwards;
}

.bismillah-scale-out {
  animation: bismillahScaleOut 0.5s ease-in forwards;
}

@keyframes bismillahScaleIn {
  from {
    transform: scale(0.8);
    opacity: 0;
  }

  to {
    transform: scale(1);
    opacity: 1;
  }
}

@keyframes bismillahScaleOut {
  from {
    transform: scale(1);
    opacity: 1;
  }

  to {
    transform: scale(0.8);
    opacity: 0;
  }
}

/* Rotate Animations */
.bismillah-rotate-in {
  animation: bismillahRotateIn 0.5s ease-out forwards;
}

.bismillah-spin {
  animation: bismillahSpin 1s infinite linear;
}

@keyframes bismillahRotateIn {
  from {
    transform: rotate(-180deg) scale(0.5);
    opacity: 0;
  }

  to {
    transform: rotate(0) scale(1);
    opacity: 1;
  }
}

@keyframes bismillahSpin {
  from {
    transform: rotate(0deg);
  }

  to {
    transform: rotate(360deg);
  }
}

/* Bounce Animations */
.bismillah-bounce {
  animation: bismillahBounce 1s infinite;
}

.bismillah-bounce-in {
  animation: bismillahBounceIn 0.75s ease-out forwards;
}

@keyframes bismillahBounce {

  0%,
  100% {
    transform: translateY(0);
  }

  50% {
    transform: translateY(-15px);
  }
}

@keyframes bismillahBounceIn {
  0% {
    transform: scale(0.3);
    opacity: 0;
  }

  40% {
    transform: scale(1.1);
    opacity: 1;
  }

  60% {
    transform: scale(0.9);
  }

  80% {
    transform: scale(1.03);
  }

  100% {
    transform: scale(1);
  }
}

/* Pulse Animations */
.bismillah-pulse {
  animation: bismillahPulse 2s infinite;
}

@keyframes bismillahPulse {
  0% {
    transform: scale(1);
  }

  50% {
    transform: scale(1.05);
  }

  100% {
    transform: scale(1);
  }
}

/* Shake Animations */
.bismillah-shake {
  animation: bismillahShake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
}

@keyframes bismillahShake {

  10%,
  90% {
    transform: translate3d(-1px, 0, 0);
  }

  20%,
  80% {
    transform: translate3d(2px, 0, 0);
  }

  30%,
  50%,
  70% {
    transform: translate3d(-4px, 0, 0);
  }

  40%,
  60% {
    transform: translate3d(4px, 0, 0);
  }
}

/* Heartbeat Animation */
.bismillah-heartbeat {
  animation: bismillahHeartbeat 1.5s ease-in-out infinite;
}

@keyframes bismillahHeartbeat {
  0% {
    transform: scale(1);
  }

  14% {
    transform: scale(1.15);
  }

  28% {
    transform: scale(1);
  }

  42% {
    transform: scale(1.15);
  }

  70% {
    transform: scale(1);
  }
}

/* Flip Animations */
.bismillah-flip-x {
  animation: bismillahFlipX 1s ease-in-out;
  backface-visibility: visible;
}

.bismillah-flip-y {
  animation: bismillahFlipY 1s ease-in-out;
  backface-visibility: visible;
}

@keyframes bismillahFlipX {
  0% {
    transform: perspective(400px) rotateX(90deg);
    opacity: 0;
  }

  40% {
    transform: perspective(400px) rotateX(-10deg);
  }

  70% {
    transform: perspective(400px) rotateX(10deg);
  }

  100% {
    transform: perspective(400px) rotateX(0deg);
    opacity: 1;
  }
}

@keyframes bismillahFlipY {
  0% {
    transform: perspective(400px) rotateY(90deg);
    opacity: 0;
  }

  40% {
    transform: perspective(400px) rotateY(-10deg);
  }

  70% {
    transform: perspective(400px) rotateY(10deg);
  }

  100% {
    transform: perspective(400px) rotateY(0deg);
    opacity: 1;
  }
}

/* Hinge Animation */
.bismillah-hinge {
  animation: bismillahHinge 2s ease-in-out;
  transform-origin: top left;
}

@keyframes bismillahHinge {
  0% {
    transform: rotate(0);
  }

  20%,
  60% {
    transform: rotate(80deg);
  }

  40%,
  80% {
    transform: rotate(60deg);
  }

  100% {
    transform: translateY(700px);
    opacity: 0;
  }
}

/* Roll In/Out Animations */
.bismillah-roll-in {
  animation: bismillahRollIn 1s ease-out forwards;
}

.bismillah-roll-out {
  animation: bismillahRollOut 1s ease-in forwards;
}

@keyframes bismillahRollIn {
  from {
    transform: translateX(-100%) rotate(-120deg);
    opacity: 0;
  }

  to {
    transform: translateX(0) rotate(0);
    opacity: 1;
  }
}

@keyframes bismillahRollOut {
  from {
    transform: translateX(0) rotate(0);
    opacity: 1;
  }

  to {
    transform: translateX(100%) rotate(120deg);
    opacity: 0;
  }
}

/* Typing Animation */
.bismillah-typing {
  overflow: hidden;
  white-space: nowrap;
  border-right: 2px solid var(--bismillah-primary-color, #4361ee);
  animation: bismillahTyping 3.5s steps(40, end) infinite, bismillahBlink 0.75s step-end infinite;
}

@keyframes bismillahTyping {
  from {
    width: 0;
  }

  to {
    width: 100%;
  }
}

@keyframes bismillahBlink {

  from,
  to {
    border-color: transparent;
  }

  50% {
    border-color: var(--bismillah-primary-color, #4361ee);
  }
}

/* Focus Attention Animation */
.bismillah-focus-attention {
  animation: bismillahFocusAttention 2s ease-in-out;
}

@keyframes bismillahFocusAttention {
  0% {
    transform: scale(1);
  }

  50% {
    transform: scale(1.05);
    box-shadow: 0 0 20px rgba(0, 123, 255, 0.5);
  }

  100% {
    transform: scale(1);
  }
}

/* Float Animation */
.bismillah-float {
  animation: bismillahFloat 3s ease-in-out infinite;
}

@keyframes bismillahFloat {
  0% {
    transform: translateY(0);
  }

  50% {
    transform: translateY(-10px);
  }

  100% {
    transform: translateY(0);
  }
}

/* Wobble Animation */
.bismillah-wobble {
  animation: bismillahWobble 1s ease-in-out;
}

@keyframes bismillahWobble {
  0% {
    transform: translateX(0%);
  }

  15% {
    transform: translateX(-25%) rotate(-5deg);
  }

  30% {
    transform: translateX(20%) rotate(3deg);
  }

  45% {
    transform: translateX(-15%) rotate(-3deg);
  }

  60% {
    transform: translateX(10%) rotate(2deg);
  }

  75% {
    transform: translateX(-5%) rotate(-1deg);
  }

  100% {
    transform: translateX(0%);
  }
}

/* Jello Animation */
.bismillah-jello {
  animation: bismillahJello 1s ease;
}

@keyframes bismillahJello {
  11.1% {
    transform: none;
  }

  22.2% {
    transform: skewX(-12.5deg) skewY(-12.5deg);
  }

  33.3% {
    transform: skewX(6.25deg) skewY(6.25deg);
  }

  44.4% {
    transform: skewX(-3.125deg) skewY(-3.125deg);
  }

  55.5% {
    transform: skewX(1.5625deg) skewY(1.5625deg);
  }

  66.6% {
    transform: skewX(-0.78125deg) skewY(-0.78125deg);
  }

  77.7% {
    transform: skewX(0.390625deg) skewY(0.390625deg);
  }

  88.8% {
    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
  }

  100% {
    transform: none;
  }
}

/* Swing Animation */
.bismillah-swing {
  transform-origin: top center;
  animation: bismillahSwing 1s ease;
}

@keyframes bismillahSwing {
  20% {
    transform: rotate(15deg);
  }

  40% {
    transform: rotate(-10deg);
  }

  60% {
    transform: rotate(5deg);
  }

  80% {
    transform: rotate(-5deg);
  }

  100% {
    transform: rotate(0deg);
  }
}

/* Tada Animation */
.bismillah-tada {
  animation: bismillahTada 1s ease;
}

@keyframes bismillahTada {
  0% {
    transform: scale(1);
  }

  10%,
  20% {
    transform: scale(0.9) rotate(-3deg);
  }

  30%,
  50%,
  70%,
  90% {
    transform: scale(1.1) rotate(3deg);
  }

  40%,
  60%,
  80% {
    transform: scale(1.1) rotate(-3deg);
  }

  100% {
    transform: scale(1) rotate(0);
  }
}

/* Glitch Effect */
.bismillah-glitch {
  position: relative;
  animation: bismillahGlitch 1s linear infinite;
}

.bismillah-glitch::before,
.bismillah-glitch::after {
  content: attr(data-text);
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

.bismillah-glitch::before {
  left: 2px;
  text-shadow: -1px 0 #00fff9;
  clip: rect(44px, 450px, 56px, 0);
  animation: bismillahGlitchBefore 2s linear alternate-reverse infinite;
}

.bismillah-glitch::after {
  left: -2px;
  text-shadow: -1px 0 #ff00c1;
  clip: rect(44px, 450px, 56px, 0);
  animation: bismillahGlitchAfter 3s linear alternate-reverse infinite;
}

@keyframes bismillahGlitch {

  2%,
  64% {
    transform: translate(2px, 0) skew(0deg);
  }

  4%,
  60% {
    transform: translate(-2px, 0) skew(0deg);
  }

  62% {
    transform: translate(0, 0) skew(5deg);
  }
}

@keyframes bismillahGlitchBefore {
  0% {
    clip: rect(31px, 9999px, 94px, 0);
  }

  10% {
    clip: rect(112px, 9999px, 76px, 0);
  }

  20% {
    clip: rect(85px, 9999px, 33px, 0);
  }

  30% {
    clip: rect(24px, 9999px, 64px, 0);
  }

  40% {
    clip: rect(59px, 9999px, 26px, 0);
  }

  50% {
    clip: rect(93px, 9999px, 37px, 0);
  }

  60% {
    clip: rect(79px, 9999px, 83px, 0);
  }

  70% {
    clip: rect(129px, 9999px, 39px, 0);
  }

  80% {
    clip: rect(37px, 9999px, 144px, 0);
  }

  90% {
    clip: rect(71px, 9999px, 61px, 0);
  }

  100% {
    clip: rect(10px, 9999px, 145px, 0);
  }
}

@keyframes bismillahGlitchAfter {
  0% {
    top: -10px;
    clip: rect(21px, 9999px, 154px, 0);
  }

  10% {
    clip: rect(32px, 9999px, 16px, 0);
  }

  20% {
    clip: rect(95px, 9999px, 83px, 0);
  }

  30% {
    clip: rect(14px, 9999px, 4px, 0);
  }

  40% {
    clip: rect(59px, 9999px, 126px, 0);
  }

  50% {
    clip: rect(93px, 9999px, 37px, 0);
  }

  60% {
    clip: rect(79px, 9999px, 83px, 0);
  }

  70% {
    clip: rect(19px, 9999px, 39px, 0);
  }

  80% {
    clip: rect(37px, 9999px, 14px, 0);
  }

  90% {
    clip: rect(71px, 9999px, 61px, 0);
  }

  100% {
    clip: rect(10px, 9999px, 45px, 0);
  }
}

/* Background Animations */
.bismillah-bg-gradient-animate {
  background-size: 400% 400%;
  animation: bismillahGradientBG 15s ease infinite;
}

@keyframes bismillahGradientBG {
  0% {
    background-position: 0% 50%;
  }

  50% {
    background-position: 100% 50%;
  }

  100% {
    background-position: 0% 50%;
  }
}