/* ==========================================================================
   MICRO-INTERACTIONS & shared animation helpers
   ========================================================================== */

.page-transition-veil {
  position: fixed; inset: 0; z-index: 5000; background: var(--bg-0);
  transform: translateY(100%); pointer-events: none;
}

.fade-page-in { animation: pageFadeIn .7s var(--ease-out) both; }
@keyframes pageFadeIn { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: translateY(0); } }

/* Card lift + image reveal handled inline via GSAP; below are pure-CSS fallbacks */
.img-reveal-wrap { position: relative; overflow: hidden; }
.img-reveal-wrap::before {
  content: ""; position: absolute; inset: 0; background: var(--bg-2); z-index: 2;
  transform-origin: right; transition: transform 1s var(--ease-in-out);
}
.img-reveal-wrap.is-revealed::before { transform: scaleX(0); }

/* Buttons: subtle press */
.btn:active { transform: scale(0.97); }

/* Floating label pulse for HUD readouts */
.pulse-dot {
  width: 6px; height: 6px; border-radius: 50%; background: var(--gold);
  box-shadow: 0 0 0 0 rgba(201,161,90,0.6); animation: pulse 2.4s ease-out infinite;
}
@keyframes pulse {
  0% { box-shadow: 0 0 0 0 rgba(201,161,90,0.55); }
  70% { box-shadow: 0 0 0 10px rgba(201,161,90,0); }
  100% { box-shadow: 0 0 0 0 rgba(201,161,90,0); }
}

/* Skeleton shimmer for lazy content */
.skeleton {
  background: linear-gradient(90deg, var(--bg-1) 25%, var(--bg-2) 50%, var(--bg-1) 75%);
  background-size: 200% 100%; animation: shimmer 1.6s ease-in-out infinite;
}
@keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
