@keyframes ecosystemFadeIn{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.animate-ecosystemFadeIn{animation:ecosystemFadeIn .4s ease-out forwards}@keyframes connectionPulse{0%{stroke-dashoffset:0}to{stroke-dashoffset:-100}}.connection-pulse{animation:connectionPulse var(--pulse-dur, 2s) linear infinite}.connection-pulse-sunset{animation:connectionPulse var(--pulse-dur, 2s) steps(8) infinite}@keyframes personaPulse{0%,to{transform:scale(1);filter:brightness(1)}50%{transform:scale(1.03);filter:brightness(1.15)}}@keyframes traceHighlight{0%{box-shadow:none}40%{box-shadow:0 0 16px var(--highlight-color-60),0 0 32px var(--highlight-color-30)}to{box-shadow:0 0 8px var(--highlight-color-40),0 0 16px var(--highlight-color-20)}}.trace-highlighted{animation:traceHighlight .6s ease-out forwards;animation-delay:var(--cascade-delay, 0ms)}.trace-origin{box-shadow:0 0 12px var(--highlight-color-60),0 0 24px var(--highlight-color-30);border-color:var(--highlight-color)!important}@keyframes traceFlash{0%{opacity:.3}30%{opacity:1}to{opacity:var(--trace-opacity, .85)}}.trace-flash{animation:traceFlash .5s ease-out forwards}@keyframes timelineBoundaryFlash{0%{filter:brightness(1)}30%{filter:brightness(1.8)}to{filter:brightness(1)}}.timeline-boundary-flash{animation:timelineBoundaryFlash .6s ease-out}@keyframes cardPulse{0%,to{box-shadow:0 0 6px var(--highlight-color-40),0 0 12px var(--highlight-color-20)}50%{box-shadow:0 0 20px var(--highlight-color-60),0 0 40px var(--highlight-color-30),0 0 60px var(--highlight-color-20)}}.card-pulse{animation:cardPulse 2s ease-in-out infinite}
