/* Front Animations & helpers */
.nidi-fb-section { position: relative; }
.nidi-fb-section .nidi-fb-container { max-width: 1200px; margin: 0 auto; padding: 0 20px; }
.nidi-anim { opacity: 0; will-change: transform, opacity; }
.nidi-anim.is-inview { opacity: 1; transform: none !important; }
.nidi-anim { transition-property: transform, opacity; transition-duration: .7s; transition-timing-function: ease; transition-delay: 0s; }
.nidi-anim.anim-fade { transform: none; }
.nidi-anim.anim-slide-up { transform: translateY(24px); }
.nidi-anim.anim-slide-down { transform: translateY(-24px); }
.nidi-anim.anim-slide-left { transform: translateX(24px); }
.nidi-anim.anim-slide-right { transform: translateX(-24px); }
.nidi-anim.anim-zoom { transform: scale(0.96); }
.nidi-anim.anim-flip-x { transform: rotateX(-80deg); transform-origin: center; }
.nidi-anim.anim-flip-y { transform: rotateY(-80deg); transform-origin: center; }
.nidi-anim.anim-rotate { transform: rotate(-8deg); }
.nidi-anim.anim-scale-up { transform: scale(0.85); }
.nidi-anim.anim-scale-down { transform: scale(1.15); }
@keyframes nidi-pulse { 0%{transform:scale(1)}50%{transform:scale(1.05)}100%{transform:scale(1)} }
@keyframes nidi-bounce { 0%,20%,53%,80%,100%{transform:translate3d(0,0,0)}40%,43%{transform:translate3d(0,-12px,0)}70%{transform:translate3d(0,-8px,0)}90%{transform:translate3d(0,-4px,0)} }
@keyframes nidi-tada { 0%{transform:scale(1)}10%,20%{transform:scale(.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale(1.1) rotate(3deg)}40%,60%,80%{transform:scale(1.1) rotate(-3deg)}100%{transform:scale(1) rotate(0)} }
@keyframes nidi-shake { 10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)} }
.nidi-anim.anim-pulse { animation: nidi-pulse 1.2s ease both paused; }
.nidi-anim.anim-bounce { animation: nidi-bounce 1.2s ease both paused; }
.nidi-anim.anim-tada { animation: nidi-tada 1s ease both paused; }
.nidi-anim.anim-shake { animation: nidi-shake .7s ease both paused; }
.nidi-anim.is-inview.anim-pulse,
.nidi-anim.is-inview.anim-bounce,
.nidi-anim.is-inview.anim-tada,
.nidi-anim.is-inview.anim-shake { animation-play-state: running; }
.nidi-anim.anim-fade-up { opacity:0; transform: translateY(20px); }
.nidi-anim.anim-fade-down { opacity:0; transform: translateY(-20px); }
.nidi-anim.anim-fade-left { opacity:0; transform: translateX(20px); }
.nidi-anim.anim-fade-right { opacity:0; transform: translateX(-20px); }
@keyframes nidi-blur-in { 0%{filter:blur(6px); opacity:0} 100%{filter:blur(0); opacity:1} }
.nidi-anim.anim-blur-in { opacity:0; }
.nidi-anim.is-inview.anim-blur-in { animation: nidi-blur-in .8s ease both; }

/* Layout Width Controls */
.nidi-fb-section.layout-default .nidi-fb-container{max-width:1200px;margin:0 auto;padding:0 20px;}
.nidi-fb-section.layout-compact .nidi-fb-container{max-width:800px;margin:0 auto;padding:0 20px;}
.nidi-fb-section.layout-full .nidi-fb-container{width:100%;max-width:none;padding:0;}
.nidi-fb-section.layout-full-contained{width:100%;max-width:none;}
.nidi-fb-section.layout-full-contained .nidi-fb-container{max-width:1200px;margin:0 auto;padding:0 20px;}
