/* fx.css — animation & micro-interactions (respects prefers-reduced-motion) */
#fxBar{position:fixed;top:0;left:0;height:3px;width:100%;background:linear-gradient(90deg,#3e6ae1,#7aa2ff);transform-origin:0 50%;transform:scaleX(0);z-index:200;pointer-events:none}
body{animation:fxPage .7s ease both}
@keyframes fxPage{from{opacity:0}to{opacity:1}}
.nav{transition:background .3s,box-shadow .3s,transform .35s}
.nav.fx-sh{box-shadow:0 2px 18px rgba(0,0,0,.08)}
.menu a{position:relative}
.menu a::after{content:"";position:absolute;left:12px;right:12px;bottom:4px;height:2px;background:currentColor;transform:scaleX(0);transform-origin:0 50%;transition:transform .3s ease}
.menu a:hover::after{transform:scaleX(1)}
/* hero */
.slide.on img,.slide.on video{animation:fxKb 16s ease-out both}
@keyframes fxKb{from{transform:scale(1.02)}to{transform:scale(1.12)}}
.slide.on .copy>*{animation:fxRise .9s cubic-bezier(.2,.7,.2,1) both}
.slide.on .copy>*:nth-child(2){animation-delay:.12s}
.slide.on .copy>*:nth-child(3){animation-delay:.24s}
.slide.on .stat{animation:fxRise .9s cubic-bezier(.2,.7,.2,1) both}
@keyframes fxRise{from{opacity:0;transform:translateY(28px)}to{opacity:1;transform:none}}
.stats .stat{animation:fxRise .9s .3s cubic-bezier(.2,.7,.2,1) both}
.stats .stat:nth-child(2){animation-delay:.42s}.stats .stat:nth-child(3){animation-delay:.54s}.stats .stat:nth-child(4){animation-delay:.66s}
.dot.on{animation:fxPulse 2s ease-in-out infinite}
@keyframes fxPulse{0%,100%{box-shadow:0 0 0 0 rgba(255,255,255,.5)}50%{box-shadow:0 0 0 7px rgba(255,255,255,0)}}
/* scroll reveal for home blocks */
.fx-rv{opacity:0;transform:translateY(40px) scale(.98);transition:opacity .9s ease,transform .9s cubic-bezier(.2,.7,.2,1)}
.fx-rv.fx-in{opacity:1;transform:none}
/* tilt + glare */
.fx-t{position:relative;will-change:transform}
.fx-t.tilting{transition:transform .12s ease-out !important}
.fx-glare{position:absolute;inset:0;pointer-events:none;border-radius:inherit;opacity:0;transition:opacity .3s;z-index:3;background:radial-gradient(circle at var(--mx,50%) var(--my,50%),rgba(255,255,255,.28),transparent 55%)}
.fx-t.tilting .fx-glare{opacity:1}
.f-card .fx-glare,.c-grp .fx-glare,.c-stat .fx-glare,.c-box .fx-glare,.card .fx-glare{background:radial-gradient(circle at var(--mx,50%) var(--my,50%),rgba(62,106,225,.13),transparent 60%)}
/* buttons */
.btn{position:relative;overflow:hidden}
.fx-rip{position:absolute;border-radius:50%;background:rgba(255,255,255,.55);transform:scale(0);animation:fxRip .6s ease-out forwards;pointer-events:none}
@keyframes fxRip{to{transform:scale(4);opacity:0}}
.btn.primary{background-image:linear-gradient(110deg,transparent 35%,rgba(255,255,255,.28) 50%,transparent 65%);background-size:250% 100%;background-position:150% 0;transition:background-position .7s,transform .15s,background-color .2s}
.btn.primary:hover{background-position:-50% 0}
/* curriculum / faculty extras */
.c-bar div{transform:scaleX(0);transform-origin:0 50%;transition:transform 1.1s cubic-bezier(.2,.7,.2,1)}
.c-bar.in div{transform:none}
.c-bar.in div:nth-child(2){transition-delay:.15s}.c-bar.in div:nth-child(3){transition-delay:.3s}
.c-tl li::before{transition:transform .4s}
.c-tl li:hover::before{transform:scale(1.6)}
.c-row{transition:background .2s,padding-left .25s}
.c-row:hover{background:#f6f8fd;padding-left:10px}
.c-acc details[open] .c-rows{animation:fxOpen .4s ease}
@keyframes fxOpen{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
.c-chip{animation:fxChip 3s ease-in-out infinite}
@keyframes fxChip{0%,100%{box-shadow:0 0 0 0 rgba(62,106,225,.35)}50%{box-shadow:0 0 0 8px rgba(62,106,225,0)}}
.f-hero h1,.f-hero p,.f-hero .f-seg,.c-title,.c-chip{animation-name:fxRise;animation-duration:.9s;animation-fill-mode:both;animation-timing-function:cubic-bezier(.2,.7,.2,1)}
.f-hero p{animation-delay:.12s}.f-hero .f-seg{animation-delay:.24s}
.c-chip{animation:fxRise .9s .3s both,fxChip 3s 1.2s ease-in-out infinite}
.f-ph img{transition:transform 1.2s cubic-bezier(.2,.7,.2,1),filter .5s}
.f-card:hover .f-ph img{filter:saturate(1.1)}
.foot a{transition:opacity .2s}
@media(prefers-reduced-motion:reduce){
 *,*::before,*::after{animation:none !important;transition-duration:.01ms !important}
 .fx-rv,.c-bar div{opacity:1;transform:none}
}
