[data-reveal] {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity .7s ease, transform .7s cubic-bezier(.22,1,.36,1);
}
[data-reveal="fade-down"] { transform: translateY(-16px); }
[data-reveal="fade-left"] { transform: translateX(30px); }
[data-reveal="fade-right"] { transform: translateX(-30px); }
[data-reveal="zoom"] { transform: scale(.9); }

[data-reveal].is-visible {
  opacity: 1;
  transform: translate(0, 0) scale(1);
}

[data-reveal-group] > * { transition-delay: calc(var(--i, 0) * 90ms); }

@media (prefers-reduced-motion: reduce) {
  [data-reveal] { transition: none; opacity: 1; transform: none; }
}

/* micro-interactions */
.pop-in { animation: pop-in .35s cubic-bezier(.22,1.5,.36,1); }
@keyframes pop-in { from { transform: scale(.85); opacity: 0; } to { transform: scale(1); opacity: 1; } }

.shake { animation: shake .4s; }
@keyframes shake { 10%,90% { transform: translateX(-1px); } 20%,80% { transform: translateX(2px); } 30%,50%,70% { transform: translateX(-4px); } 40%,60% { transform: translateX(4px); } }

.skeleton { background: linear-gradient(90deg, #f1e4ea 25%, #fbeef3 37%, #f1e4ea 63%); background-size: 400% 100%; animation: skeleton-loading 1.4s ease infinite; border-radius: var(--radius-sm); }
@keyframes skeleton-loading { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }

/* toast */
.vc-toast {
  position: fixed; bottom: 30px; left: 50%; transform: translateX(-50%) translateY(20px);
  background: #3a2e33; color: #fff; padding: 14px 24px; border-radius: 999px; font-size: 14px;
  opacity: 0; transition: opacity .3s ease, transform .3s ease; z-index: 200; box-shadow: 0 10px 30px rgba(0,0,0,.2);
}
.vc-toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }
.vc-toast.success { background: #1c7a4d; }
.vc-toast.error { background: #b02a2a; }
