:root{
  --ease-spring:cubic-bezier(.34,1.56,.64,1);
  --ease-out:cubic-bezier(.2,.7,.2,1);
  --d-fast:.45s; --d-base:.7s; --d-slow:1.1s;
}
[data-anim]{will-change:transform,opacity,filter,clip-path}
/* stare inițială */
.m-rise{opacity:0;transform:translateY(24px)}
.m-blur{opacity:0;filter:blur(12px)}
.m-pop{opacity:0;transform:scale(.8)}
.m-wipe{clip-path:inset(0 100% 0 0)}
.m-words .m-word{display:inline-block;opacity:0;transform:translateY(.5em)}
.m-draw{stroke-dasharray:1;stroke-dashoffset:1}
/* stare finală (aplicată de JS prin .is-in) */
.is-in.m-rise{opacity:1;transform:none;transition:opacity var(--d-base) var(--ease-out),transform var(--d-base) var(--ease-out)}
.is-in.m-blur{opacity:1;filter:blur(0);transition:opacity var(--d-base) ease,filter var(--d-base) ease}
.is-in.m-pop{opacity:1;transform:scale(1);transition:opacity var(--d-fast) ease,transform var(--d-base) var(--ease-spring)}
.is-in.m-wipe{clip-path:inset(0 0 0 0);transition:clip-path var(--d-slow) var(--ease-out)}
.is-in.m-words .m-word{opacity:1;transform:none;transition:opacity var(--d-base) var(--ease-out),transform var(--d-base) var(--ease-spring)}
.is-in.m-draw{stroke-dashoffset:0;transition:stroke-dashoffset var(--d-slow) var(--ease-out)}
/* export: fără mișcare */
.pm-export *{animation:none!important;transition:none!important}
