/* Extra animations (remove by setting EXTRA = False in build.py) */
.typed{display:block;margin-top:14px;font-weight:600;color:var(--blue);font-size:1.1rem;min-height:1.7em}
.typed:after{content:"";display:inline-block;width:2px;height:1.1em;background:var(--teal);margin-left:3px;vertical-align:-3px;animation:blink 1s steps(1) infinite}
@keyframes blink{50%{opacity:0}}
/* decorative floating shapes */
.hero:before,.hero:after,.banner:before,.banner:after,.cta:before,.cta:after{content:"";position:absolute;border-radius:50%;pointer-events:none}
.banner,.cta{position:relative;overflow:hidden}
.hero:before{width:280px;height:280px;right:-80px;top:-90px;border:2px solid #1a4fb81f;animation:drift 14s ease-in-out infinite}
.hero:after{width:140px;height:140px;left:-40px;bottom:-40px;background:#0e9aa71a;animation:drift 11s ease-in-out infinite reverse}
.banner:before,.cta:before{width:240px;height:240px;right:-60px;top:-80px;border:2px solid #ffffff1c;animation:drift 12s ease-in-out infinite}
.banner:after,.cta:after{width:110px;height:110px;right:22%;bottom:-50px;background:#0e9aa733;animation:drift 9s ease-in-out infinite reverse}
@keyframes drift{0%,100%{transform:translate(0,0) rotate(0)}50%{transform:translate(-24px,18px) rotate(12deg)}}
/* card tilt */
.cards .card,.stats div{transform-style:preserve-3d;will-change:transform}
.tilting{transition:transform .08s linear!important}
/* testimonials carousel */
.carousel{max-width:820px;margin:0 auto;text-align:center;overflow:hidden}
.carousel .track{display:flex;transition:transform .7s cubic-bezier(.65,.05,.25,1)}
.slide{flex:0 0 100%;margin:0;padding:34px 40px;background:var(--navy);color:#fff;border-radius:10px;border-top:3px solid var(--teal)}
.slide blockquote{margin:0 0 18px;font-size:1.15rem;line-height:1.7;color:#e6eefc}.slide figcaption{color:#7fd0d8;font-weight:600}
.dots{display:flex;gap:8px;justify-content:center;margin-top:20px}.dots button{width:10px;height:10px;border-radius:50%;border:0;background:#c7d2e4;cursor:pointer;padding:0;transition:.3s}.dots button.on{background:var(--blue);width:28px;border-radius:6px}
/* industries marquee */
.marquee{overflow:hidden;-webkit-mask:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.marquee .chips{flex-wrap:nowrap;justify-content:flex-start;width:max-content;animation:scrollx 38s linear infinite}
.marquee:hover .chips{animation-play-state:paused}.marquee .chips a{white-space:nowrap}
@keyframes scrollx{to{transform:translateX(-50%)}}
/* contact form bounce-in */
.form{animation:bounceIn .9s both .2s}@keyframes bounceIn{0%{opacity:0;transform:scale(.9)}60%{opacity:1;transform:scale(1.03)}100%{transform:none}}
/* section heading underline draw */
.head h2:after{content:"";display:block;width:0;height:3px;background:var(--teal);margin:14px auto 0;transition:width .8s .3s}.head.in h2:after{width:56px}
@media(prefers-reduced-motion:reduce){.marquee .chips{animation:none;flex-wrap:wrap}.carousel .track{transition:none}}
