/* scroll-triggered reveal (use data-reveal on any element)
   Slow-motion feel: change --slow to speed everything up or down (1 = default, 0.7 = quicker, 1.4 = even slower) */
:root { --slow: 1; --ease-soft: cubic-bezier(.22, .8, .24, 1); }

.js [data-reveal] { opacity: 0; transform: translateY(80px) scale(.97); filter: blur(10px);
  transition: opacity calc(1.6s * var(--slow)) var(--ease-soft), transform calc(2s * var(--slow)) var(--ease-soft), filter calc(1.4s * var(--slow)) var(--ease-soft);
  transition-delay: calc(var(--d, 0s) * var(--slow)); will-change: opacity, transform; }

.js [data-reveal="left"] { transform: translateX(-90px); }

.js [data-reveal].in { opacity: 1; transform: none; filter: none; }

.js [data-reveal="wipe"] { opacity: 1; transform: none; filter: none; clip-path: inset(-30% 100% -30% 0); transition: clip-path calc(2s * var(--slow)) var(--ease-wipe); transition-delay: calc(var(--d, 0s) * var(--slow)); }

.js [data-reveal="wipe"].in { clip-path: inset(-30% -2% -30% -2%); }

.js [data-reveal="rise"] { opacity: 1; transform: none; filter: none; clip-path: inset(100% 0 0 0 round 230px 230px 28px 28px); transition: clip-path calc(2.2s * var(--slow)) var(--ease-wipe); transition-delay: calc(var(--d, 0s) * var(--slow)); }

.js [data-reveal="rise"].in { clip-path: inset(0 0 0 0 round 230px 230px 28px 28px); }

.js [data-reveal="split"] { filter: none; }

@media (max-width: 600px) { .js [data-reveal] { transform: translateY(50px) scale(.98); filter: blur(6px); }
 }

html.rm.js [data-reveal] { filter: none; transition: none; }


/* anchor jump: effects land in their final state instantly (no half-played animation) */
html.no-tr [data-reveal],html.no-tr .scrub .wd { transition: none !important; transition-delay: 0s !important; }

