/*
 * Sowelo Apps — Animações & Keyframes v1.1
 *
 * Projeto Gerado pelo Prompt Mestre do Desenvolvedor e Vibe Coder Dante Testa — www.dantetesta.com.br
 */

/* ============================================================
   KEYFRAMES
   ============================================================ */

/* Hero orb */
@keyframes pulse-dot   { 0%,100%{opacity:1;transform:scale(1)} 50%{opacity:.5;transform:scale(.8)} }
@keyframes orb-float   { 0%,100%{transform:translateY(0)} 50%{transform:translateY(-14px)} }
@keyframes orb-rotate  { from{transform:rotate(0deg)} to{transform:rotate(360deg)} }
@keyframes ring-rotate { from{transform:rotate(0deg)} to{transform:rotate(360deg)} }
@keyframes logo-pulse  {
	0%,100%{filter:drop-shadow(0 0 24px rgba(41,171,226,.55))}
	50%    {filter:drop-shadow(0 0 40px rgba(0,229,255,.85))}
}
@keyframes float-badge { 0%,100%{transform:translateY(0) rotate(-1deg)} 50%{transform:translateY(-7px) rotate(1deg)} }

/* Spotlight background do hero */
@keyframes spotlight-move {
	0%   { background: radial-gradient(ellipse 60% 50% at 30% 40%, rgba(41,171,226,.08) 0%, transparent 70%); }
	33%  { background: radial-gradient(ellipse 55% 55% at 60% 35%, rgba(0,229,255,.06) 0%, transparent 70%); }
	66%  { background: radial-gradient(ellipse 65% 45% at 20% 60%, rgba(41,171,226,.07) 0%, transparent 70%); }
	100% { background: radial-gradient(ellipse 60% 50% at 30% 40%, rgba(41,171,226,.08) 0%, transparent 70%); }
}

/* "No Time Limit" — word blur-in (controlado via JS com classe .visible) */
/* Classes aplicadas em CSS puro para fallback: */
@keyframes word-blur-in {
	from { opacity: 0; filter: blur(8px); }
	to   { opacity: 1; filter: blur(0);   }
}

/* Marquee infinito — serviços e ferramentas */
@keyframes marquee-scroll {
	from { transform: translateX(0); }
	to   { transform: translateX(-50%); }
}
@keyframes tools-scroll {
	from { transform: translateX(0); }
	to   { transform: translateX(-50%); }
}

/* Neon text pulse (marquee text) */
@keyframes neon-text-pulse {
	from {
		text-shadow:
			0 0 16px rgba(0,229,255,.7),
			0 0 32px rgba(0,229,255,.35),
			0 0 60px rgba(0,229,255,.15);
	}
	to {
		text-shadow:
			0 0 24px rgba(0,229,255,1),
			0 0 48px rgba(0,229,255,.5),
			0 0 80px rgba(0,229,255,.2);
	}
}

/* Card rotating background (legado) */
@keyframes card-bg-rotate { from{transform:rotate(0deg)} to{transform:rotate(360deg)} }

/* Padrão geométrico radial dos cards — translate mantém centralizado durante rotação */
@keyframes card-geo-rotate {
	from { transform: translate(-50%, -50%) rotate(0deg); }
	to   { transform: translate(-50%, -50%) rotate(360deg); }
}

/* Contact icon pulse */
@keyframes contact-icon-pulse {
	0%,100%{transform:scale(1);   filter:drop-shadow(0 0 8px rgba(0,229,255,.6))}
	50%    {transform:scale(1.12);filter:drop-shadow(0 0 18px rgba(0,229,255,.95))}
}

/* Gradient shift (hero tagline tokens) */
@keyframes gradient-shift {
	0%  {background-position:0% 50%}
	50% {background-position:100% 50%}
	100%{background-position:0% 50%}
}

/* Gerais */
@keyframes spin         { to{transform:rotate(360deg)} }
@keyframes fade-up      { from{opacity:0;transform:translateY(24px)} to{opacity:1;transform:translateY(0)} }
@keyframes fade-in      { from{opacity:0} to{opacity:1} }

/* Fundo ambiente (site inteiro) */
@keyframes bg-drift {
	0%   { transform: translate3d(0,0,0) scale(1); }
	50%  { transform: translate3d(-1.5%, 1%, 0) scale(1.03); }
	100% { transform: translate3d(1.5%, -1%, 0) scale(1.02); }
}

/* Soluções — luz percorrendo a borda de cada nó do fluxo */
@property --edge-angle {
	syntax: '<angle>';
	inherits: false;
	initial-value: 0deg;
}
@keyframes edge-travel { to { --edge-angle: 360deg; } }
@keyframes flow-pulse {
	0%   { background-position: 0 -220%; }
	100% { background-position: 0 220%; }
}

/* Tecnologia — carrossel infinito */
@keyframes tech-carousel-scroll {
	from { transform: translateX(0); }
	to   { transform: translateX(-50%); }
}

/* ============================================================
   ACESSIBILIDADE
   ============================================================ */
@media (prefers-reduced-motion: reduce) {
	.hero-orb, .hero-orb::before,
	.hero-ring, .hero-float-badge,
	.hero-orb img, .hero-badge-dot,
	.hero-spotlight,
	.contact-icon-anim::before,
	.contact-icon-anim::after,
	.contact-icon-anim svg,
	.marquee-track, .tools-track,
	.contact-marquee-track,
	.service-card-rot::after,
	.gradient-animated,
	.tagline-word,
	.anim-fade-up, .anim-fade-in,
	.anim-scale-in, .anim-slide-r,
	.footer-anim,
	.bg-ambient, .reveal,
	.flow-node::before, .flow-connector::after,
	.tech-carousel {
		animation: none !important;
		transition: none !important;
		opacity: 1 !important;
		transform: none !important;
		filter: none !important;
	}
}
