/**
 * Kraftrs — keyframe library
 * Only keyframes & legacy compat here. Component classes live in style.css / effects.css.
 */

/* Marquee ticker */
@keyframes kf-marquee {
	from { transform: translateX(0); }
	to   { transform: translateX(-50%); }
}

/* SVG dashed orbit links */
@keyframes kf-dash {
	to { stroke-dashoffset: -24; }
}

/* Ambient glow breathe */
@keyframes kf-glow-breathe {
	from { opacity: 0.7; transform: translateX(-50%) scale(0.95); }
	to   { opacity: 1;   transform: translateX(-50%) scale(1.05); }
}

/* Amber ping on live dots */
@keyframes kf-ping {
	0%   { box-shadow: 0 0 0 0   rgba(230,158,44,0.55); }
	70%  { box-shadow: 0 0 0 9px rgba(230,158,44,0); }
	100% { box-shadow: 0 0 0 0   rgba(230,158,44,0); }
}

/* Gentle float for hero center node */
@keyframes kf-float-soft {
	0%,100% { transform: translateY(0); }
	50%     { transform: translateY(-9px); }
}

/* Chat message entrance */
@keyframes kf-msg-in {
	from { opacity: 0; transform: translateY(10px); }
	to   { opacity: 1; transform: none; }
}

/* Typing indicator */
@keyframes kf-blink {
	0%,100% { opacity: 0.3; }
	50%     { opacity: 1; }
}

/* Aurora drift — slow multi-directional float */
@keyframes kf-aurora-drift {
	0%   { transform: translate(0, 0) scale(1); }
	33%  { transform: translate(3%, -2%) scale(1.04); }
	66%  { transform: translate(-2%, 3%) scale(0.97); }
	100% { transform: translate(1%, -1%) scale(1.02); }
}

/* Grain flicker — frame-by-frame noise shift */
@keyframes kf-grain-shift {
	0%,100% { transform: translate(0, 0); }
	10%  { transform: translate(-2%, -3%); }
	20%  { transform: translate(3%,  1%); }
	30%  { transform: translate(-1%,  4%); }
	40%  { transform: translate(2%, -1%); }
	50%  { transform: translate(-3%,  2%); }
	60%  { transform: translate(1%, -4%); }
	70%  { transform: translate(-2%,  3%); }
	80%  { transform: translate(4%,  1%); }
	90%  { transform: translate(-1%, -2%); }
}

/* Scenario chip highlight pulse */
@keyframes kf-chip-pulse {
	0%,100% { box-shadow: 0 0 0 0 rgba(230,158,44,0.4); }
	50%     { box-shadow: 0 0 0 6px rgba(230,158,44,0); }
}

/* Pipeline segment travel */
@keyframes kf-pipeline-flow {
	from { stroke-dashoffset: 40; }
	to   { stroke-dashoffset: 0; }
}

/* FAQ accordion expand */
@keyframes kf-details-open {
	from { opacity: 0; transform: translateY(-6px); }
	to   { opacity: 1; transform: none; }
}

/* Legacy compat */
@keyframes fadeIn   { from { opacity: 0; } to { opacity: 1; } }
@keyframes fadeInUp { from { opacity: 0; transform: translate3d(0,30px,0); } to { opacity: 1; transform: none; } }
.animated     { animation-duration: 0.8s; animation-fill-mode: both; }
.fadeIn       { animation-name: fadeIn; }
.fadeInUp     { animation-name: fadeInUp; }
