/* Soft shadow/elevation */
.elevation-sm {
  box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.06);
}
.elevation-md {
  box-shadow: 0 4px 6px rgba(0,0,0,0.1), 0 2px 4px rgba(0,0,0,0.06);
}
.elevation-lg {
  box-shadow: 0 10px 15px rgba(0,0,0,0.15), 0 4px 6px rgba(0,0,0,0.1);
}
.transition-maxheight {
  transition: max-height 0.35s cubic-bezier(0.4,0,0.2,1);
}
.rotate-180 {
  transform: rotate(180deg);
}

/* Keyframes untuk modal */
@keyframes fadeInScale {
  0% { opacity: 0; transform: scale(0.95); }
  100% { opacity: 1; transform: scale(1); }
}
@keyframes fadeOutScale {
  0% { opacity: 1; transform: scale(1); }
  100% { opacity: 0; transform: scale(0.95); }
}

/* Glassmorphism untuk modal */
.modal-glass {
  background-color: rgba(255,255,255,0.25);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border: 1px solid rgba(255,255,255,0.4);
}

/* Animasi masuk/keluar modal */
.modal-animate-in {
  animation: fadeInScale 0.3s cubic-bezier(0.4,0,0.2,1) forwards;
  transform-origin: center center;
}
.modal-animate-out {
  animation: fadeOutScale 0.3s cubic-bezier(0.4,0,0.2,1) forwards;
  transform-origin: center center;
}

/* Animasi slide tombol */
@keyframes slideX {
  0%, 100% { transform: translateX(0); }
  50%      { transform: translateX(4px); }
}
.animate-slide-x {
  animation: slideX 1.5s ease-in-out infinite;
}
@keyframes blink {
  0%, 100% { opacity: 1; }
  50% { opacity: 0; }
}

.blink-red {
  color: red;
  animation: blink 1s infinite;
}