/* Firm Tech INC — shared animation library.
   Elements paint from their inline styles; these classes only ADD motion. */

@keyframes a-float   { 0%,100%{transform:translateY(0)} 50%{transform:translateY(-10px)} }
@keyframes a-floatL  { 0%,100%{transform:translateY(0)} 50%{transform:translateY(-18px)} }
@keyframes a-drift   { 0%,100%{transform:translate(0,0)} 33%{transform:translate(8px,-10px)} 66%{transform:translate(-8px,-4px)} }
@keyframes a-spin    { to{transform:rotate(360deg)} }
@keyframes a-spinR   { to{transform:rotate(-360deg)} }
@keyframes a-pulse   { 0%,100%{opacity:1} 50%{opacity:.35} }
@keyframes a-ping    { 0%{transform:scale(.6);opacity:.7} 80%,100%{transform:scale(2.1);opacity:0} }
@keyframes a-flow    { to{background-position:22px 0} }
@keyframes a-flowY   { to{background-position:0 22px} }
@keyframes a-rise    { 0%,100%{transform:scaleY(.35)} 50%{transform:scaleY(1)} }
@keyframes a-scan    { 0%,100%{transform:translateX(-38%)} 50%{transform:translateX(38%)} }
@keyframes a-climb   { 0%,100%{transform:translateY(3px)} 50%{transform:translateY(-7px)} }
@keyframes a-shimmer { to{background-position:200% 0} }
@keyframes a-blink   { 0%,100%{opacity:1} 50%{opacity:.2} }
@keyframes a-wave    { 0%,100%{transform:scaleY(.3)} 50%{transform:scaleY(1)} }
@keyframes a-glow    { 0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--ac) 40%,transparent)} 50%{box-shadow:0 0 22px 3px color-mix(in srgb,var(--ac) 32%,transparent)} }
@keyframes a-dash    { to{stroke-dashoffset:-24} }
@keyframes a-travel  { 0%{offset-distance:0%} 100%{offset-distance:100%} }
@keyframes a-travelX { 0%{transform:translateX(0);opacity:0} 10%{opacity:1} 90%{opacity:1} 100%{transform:translateX(var(--tx,120px));opacity:0} }
@keyframes a-sweep   { 0%{transform:translateX(-120%)} 100%{transform:translateX(220%)} }
@keyframes a-count   { 0%,100%{opacity:.55} 50%{opacity:1} }
@keyframes a-tilt    { 0%,100%{transform:rotate(-2deg)} 50%{transform:rotate(2deg)} }

.a-float   { animation:a-float 6s ease-in-out infinite }
.a-float-s { animation:a-float 4s ease-in-out infinite }
.a-float-l { animation:a-floatL 9s ease-in-out infinite }
.a-drift   { animation:a-drift 16s ease-in-out infinite }
.a-spin    { animation:a-spin 18s linear infinite }
.a-spin-s  { animation:a-spin 9s linear infinite }
.a-spin-r  { animation:a-spinR 24s linear infinite }
.a-pulse   { animation:a-pulse 2.6s ease-in-out infinite }
.a-ping    { animation:a-ping 2.8s ease-out infinite }
.a-flow    { animation:a-flow 1s linear infinite }
.a-rise    { animation:a-rise 2.4s ease-in-out infinite }
.a-scan    { animation:a-scan 3.6s ease-in-out infinite }
.a-climb   { animation:a-climb 3s ease-in-out infinite }
.a-shimmer { background-size:200% 100%; animation:a-shimmer 3.2s linear infinite }
.a-blink   { animation:a-blink 2s ease-in-out infinite }
.a-wave    { animation:a-wave 1s ease-in-out infinite }
.a-glow    { animation:a-glow 3s ease-in-out infinite }
.a-dash    { stroke-dasharray:6 8; animation:a-dash 1.1s linear infinite }
.a-tilt    { animation:a-tilt 7s ease-in-out infinite }
.a-count   { animation:a-count 2.2s ease-in-out infinite }

/* SVG transform origins */
.a-spin, .a-spin-s, .a-spin-r, .a-rise, .a-wave { transform-box:fill-box; transform-origin:center }
.a-rise, .a-wave { transform-origin:bottom }

/* Shimmer sweep highlight for cards/panels */
.a-sweep-wrap { position:relative; overflow:hidden }
.a-sweep-wrap::after { content:""; position:absolute; top:0; bottom:0; width:40%; left:0;
  background:linear-gradient(100deg, transparent, color-mix(in srgb,var(--ac) 14%,transparent), transparent);
  transform:translateX(-120%); animation:a-sweep 4.5s ease-in-out infinite; pointer-events:none }

@media (prefers-reduced-motion: reduce) {
  .a-float,.a-float-s,.a-float-l,.a-drift,.a-spin,.a-spin-s,.a-spin-r,.a-pulse,.a-ping,.a-flow,
  .a-rise,.a-scan,.a-climb,.a-shimmer,.a-blink,.a-wave,.a-glow,.a-dash,.a-tilt,.a-count { animation:none !important }
  .a-sweep-wrap::after { animation:none !important; display:none }
}
