/* EMS Animate — reveal on scroll, entry animations */

/* Intersection observer triggers .visible on .ems-reveal */
.ems-reveal{opacity:0;transform:translateY(18px);transition:opacity .55s cubic-bezier(.4,0,.2,1),transform .55s cubic-bezier(.4,0,.2,1)}
.ems-reveal.visible{opacity:1;transform:translateY(0)}

/* Staggered children */
.ems-reveal:nth-child(2){transition-delay:.07s}
.ems-reveal:nth-child(3){transition-delay:.14s}
.ems-reveal:nth-child(4){transition-delay:.21s}

/* Activity wrap stagger */
.ems-activity-wrap{opacity:0;transform:translateY(12px);animation:ems-slide-in .45s forwards cubic-bezier(.4,0,.2,1)}
@keyframes ems-slide-in{to{opacity:1;transform:translateY(0)}}

/* Dot pop-in on progress tab open */
.ems-dot{opacity:0;transform:scale(.7);animation:ems-dot-pop .3s forwards}
@keyframes ems-dot-pop{to{opacity:1;transform:scale(1)}}

/* Toast slide */
@keyframes ems-toast-in{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
@keyframes ems-toast-out{to{opacity:0;transform:translateY(20px)}}

/* Tab panel */
.ems-tab-panel{animation:ems-fadein .3s ease}
@keyframes ems-fadein{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}

/* Auth card entrance */
.ems-auth-card{animation:ems-card-in .55s cubic-bezier(.4,0,.2,1)}
@keyframes ems-card-in{from{opacity:0;transform:translateY(24px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}

/* Hero title */
.ems-hero__title{animation:ems-fadein .5s .1s both}
.ems-greeting{animation:ems-fadein .4s both}

/* Month map bar fill */
.ems-mmap-bar__fill{transition:width 1s cubic-bezier(.4,0,.2,1) .3s}

/* Ring dash */
.ems-ring__fill{transition:stroke-dashoffset 1.6s cubic-bezier(.4,0,.2,1) .4s}
