/* ═══════════════════════════════════════════════════════
   REVEAL — unified clip-path reveal system (site-wide)
   Driven by animations.js. Text masks up; images/cards wipe open.
   ═══════════════════════════════════════════════════════ */

/* text — rises into view from behind a mask */
.rv-mask {
  clip-path: inset(0 0 105% 0);
  transform: translateY(12px);
  transition: clip-path 0.95s cubic-bezier(0.22,1,0.36,1),
              transform 0.95s cubic-bezier(0.22,1,0.36,1);
  will-change: clip-path, transform;
}
.rv-mask.rv-in { clip-path: inset(0 0 0 0); transform: none; }

/* images / boxes — curtain wipe, top to bottom */
.rv-clip {
  clip-path: inset(0 0 100% 0);
  transition: clip-path 1.1s cubic-bezier(0.22,1,0.36,1);
  will-change: clip-path;
}
.rv-clip.rv-in { clip-path: inset(0 0 0 0); }

/* project cards — horizontal wipe, left to right (staggered) */
.rv-clip-x {
  clip-path: inset(0 100% 0 0);
  transition: clip-path 1.1s cubic-bezier(0.22,1,0.36,1);
  will-change: clip-path;
}
.rv-clip-x.rv-in { clip-path: inset(0 0 0 0); }

/* accessibility — no motion */
body.reduce-motion .rv-mask,
body.reduce-motion .rv-clip,
body.reduce-motion .rv-clip-x {
  clip-path: none !important;
  transform: none !important;
  transition: none !important;
}
