/*!
 * ButterflyFX v1.1.0 — reusable butterfly animation library
 * Source artwork: FlutterBees Designs 2026 (Figma frame "34", 26 butterflies)
 * Layers (outer → inner):
 *   .bfx            motion  (float, drift, fly, circular, landing, takeoff, JS paths)
 *   .bfx__orient    heading (mirroring + lean, set by JS)
 *   .bfx__fx        effect  (breathe, turn, hover-lift)
 *   .bfx__wings     3D stage for the wing parts
 *   .bfx__part      wings   (flap / rest flap)
 * Only transform + opacity are animated, so everything runs on the compositor.
 */.bfx{--bfx-w:180px;--bfx-dur:3s;--bfx-delay:0s;--bfx-iter:infinite;--bfx-dirn:normal;--bfx-ease:cubic-bezier(.45,0,.55,1);--bfx-amp:14px;--bfx-fx-dur:3.2s;--bfx-flap-dur:.62s;--bfx-flap-angle:62deg;--bfx-flap-delay:0s;--bfx-ratio:1;--bfx-px:50%;--bfx-py:55%;--bfx-ax:0;--bfx-ay:1;--bfx-clip-l:inset(0 50% 0 0);--bfx-clip-r:inset(0 0 0 50%);--bfx-x0:-60vw;--bfx-x1:60vw;--bfx-land-x:-140px;--bfx-off-x:160px;display:inline-block;line-height:0;pointer-events:auto;position:relative;width:var(--bfx-w);-webkit-tap-highlight-color:transparent}.bfx__fx,.bfx__orient{transform-origin:50% 55%;width:100%}.bfx__orient{perspective:900px;transition:transform .35s ease}.bfx__wings{aspect-ratio:var(--bfx-ratio);perspective:700px;perspective-origin:var(--bfx-px) var(--bfx-py);position:relative;width:100%}.bfx__part{height:100%;inset:0;max-width:none;position:absolute;user-select:none;width:100%;-webkit-user-drag:none;backface-visibility:visible;transform-origin:var(--bfx-px) var(--bfx-py)}.bfx__part--l{clip-path:var(--bfx-clip-l)}.bfx__part--r{clip-path:var(--bfx-clip-r)}.bfx.is-active,.bfx.is-active .bfx__part{will-change:transform}@keyframes bfx-flap-l{0%,to{transform:rotate3d(var(--bfx-ax),var(--bfx-ay),0,0deg)}42%{transform:rotate3d(var(--bfx-ax),var(--bfx-ay),0,var(--bfx-flap-angle))}}@keyframes bfx-flap-r{0%,to{transform:rotate3d(var(--bfx-ax),var(--bfx-ay),0,0deg)}42%{transform:rotate3d(var(--bfx-ax),var(--bfx-ay),0,calc(var(--bfx-flap-angle)*-1))}}@keyframes bfx-rest-l{0%,40%,to{transform:rotate3d(var(--bfx-ax),var(--bfx-ay),0,0deg)}20%{transform:rotate3d(var(--bfx-ax),var(--bfx-ay),0,calc(var(--bfx-flap-angle)*.7))}}@keyframes bfx-rest-r{0%,40%,to{transform:rotate3d(var(--bfx-ax),var(--bfx-ay),0,0deg)}20%{transform:rotate3d(var(--bfx-ax),var(--bfx-ay),0,calc(var(--bfx-flap-angle)*-.7))}}.bfx--flap .bfx__part--l,.bfx--flap .bfx__part--solo{animation:bfx-flap-l var(--bfx-flap-dur) cubic-bezier(.5,0,.5,1) var(--bfx-flap-delay) infinite}.bfx--flap .bfx__part--r{animation:bfx-flap-r var(--bfx-flap-dur) cubic-bezier(.5,0,.5,1) var(--bfx-flap-delay) infinite}.bfx.is-resting .bfx__part--l,.bfx.is-resting .bfx__part--solo{animation:bfx-rest-l 4.2s ease-in-out var(--bfx-flap-delay) infinite}.bfx.is-resting .bfx__part--r{animation:bfx-rest-r 4.2s ease-in-out var(--bfx-flap-delay) infinite}@keyframes bfx-float{0%,to{transform:translate(0) rotate(0deg)}25%{transform:translate(4px,calc(var(--bfx-amp)*-.55)) rotate(2deg)}50%{transform:translateY(calc(var(--bfx-amp)*-1)) rotate(0deg)}75%{transform:translate(-4px,calc(var(--bfx-amp)*-.45)) rotate(-2deg)}}@keyframes bfx-hover{0%,to{transform:translate(0)}17%{transform:translate(calc(var(--bfx-amp)*.3),calc(var(--bfx-amp)*-.4))}33%{transform:translate(calc(var(--bfx-amp)*-.2),calc(var(--bfx-amp)*-.15))}50%{transform:translate(calc(var(--bfx-amp)*.15),calc(var(--bfx-amp)*.25))}67%{transform:translate(calc(var(--bfx-amp)*-.3),calc(var(--bfx-amp)*-.3))}83%{transform:translate(calc(var(--bfx-amp)*.2),calc(var(--bfx-amp)*.1))}}@keyframes bfx-up-down{0%,to{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(calc(var(--bfx-amp)*-1)) rotate(2deg)}}@keyframes bfx-circular{0%{transform:rotate(0deg) translateX(var(--bfx-amp)) rotate(0deg)}to{transform:rotate(1turn) translateX(var(--bfx-amp)) rotate(-1turn)}}@keyframes bfx-drift{0%,to{transform:translate(0) rotate(0deg)}20%{transform:translate(calc(var(--bfx-amp)*.7),calc(var(--bfx-amp)*-.35)) rotate(5deg)}45%{transform:translate(calc(var(--bfx-amp)*1.2),calc(var(--bfx-amp)*.15)) rotate(-2deg)}70%{transform:translate(calc(var(--bfx-amp)*.45),calc(var(--bfx-amp)*.4)) rotate(-6deg)}85%{transform:translate(calc(var(--bfx-amp)*-.2),calc(var(--bfx-amp)*.1)) rotate(-2deg)}}@keyframes bfx-fly{0%{transform:translate(var(--bfx-x0))}20%{transform:translate(calc(var(--bfx-x0) + (var(--bfx-x1) - var(--bfx-x0))*.2),calc(var(--bfx-amp)*-1))}40%{transform:translate(calc(var(--bfx-x0) + (var(--bfx-x1) - var(--bfx-x0))*.4),calc(var(--bfx-amp)*.4))}60%{transform:translate(calc(var(--bfx-x0) + (var(--bfx-x1) - var(--bfx-x0))*.6),calc(var(--bfx-amp)*-.8))}80%{transform:translate(calc(var(--bfx-x0) + (var(--bfx-x1) - var(--bfx-x0))*.8),calc(var(--bfx-amp)*.3))}to{transform:translate(var(--bfx-x1))}}@keyframes bfx-landing{0%{opacity:0;transform:translate(var(--bfx-land-x),-180px) rotate(-14deg)}12%{opacity:1}55%{transform:translate(calc(var(--bfx-land-x)*-.08),-26px) rotate(4deg)}80%{transform:translateY(4px) rotate(-1deg)}to{opacity:1;transform:translate(0) rotate(0deg)}}@keyframes bfx-takeoff{0%,18%{opacity:1;transform:translate(0) rotate(0deg)}26%{transform:translateY(6px) rotate(0deg)}80%{opacity:1}to{opacity:0;transform:translate(var(--bfx-off-x),-240px) rotate(-10deg)}}.bfx.bfx--float{animation:bfx-float var(--bfx-dur) var(--bfx-ease) var(--bfx-delay) var(--bfx-iter) var(--bfx-dirn) both}.bfx.bfx--hover{animation:bfx-hover var(--bfx-dur) ease-in-out var(--bfx-delay) var(--bfx-iter) var(--bfx-dirn) both}.bfx.bfx--up-down{animation:bfx-up-down var(--bfx-dur) var(--bfx-ease) var(--bfx-delay) var(--bfx-iter) var(--bfx-dirn) both}.bfx.bfx--circular{animation:bfx-circular var(--bfx-dur) linear var(--bfx-delay) var(--bfx-iter) var(--bfx-dirn) both}.bfx.bfx--drift{animation:bfx-drift var(--bfx-dur) ease-in-out var(--bfx-delay) var(--bfx-iter) var(--bfx-dirn) both}.bfx.bfx--fly{animation:bfx-fly var(--bfx-dur) linear var(--bfx-delay) var(--bfx-iter) normal both}.bfx.bfx--landing{animation:bfx-landing var(--bfx-dur) cubic-bezier(.22,.8,.3,1) var(--bfx-delay) 1 normal both}.bfx.bfx--takeoff{animation:bfx-takeoff var(--bfx-dur) cubic-bezier(.55,0,.75,.4) var(--bfx-delay) 1 normal both}@keyframes bfx-breathe{0%,to{transform:scale(1)}50%{transform:scale(1.07)}}@keyframes bfx-turn{0%,to{transform:rotate(-9deg) rotateY(-14deg)}50%{transform:rotate(9deg) rotateY(14deg)}}.bfx--breathe .bfx__fx{animation:bfx-breathe var(--bfx-fx-dur) ease-in-out var(--bfx-delay) infinite both}.bfx--turn .bfx__fx{animation:bfx-turn var(--bfx-fx-dur) ease-in-out var(--bfx-delay) infinite both}.bfx--hover-lift .bfx__fx{transition:transform .55s cubic-bezier(.3,1.4,.5,1)}.bfx--hover-lift.is-hot .bfx__fx{transform:translateY(calc(var(--bfx-amp)*-1)) scale(1.06) rotate(-4deg)}.bfx.is-paused,.bfx.is-paused *{animation-play-state:paused!important}.bfx.is-hidden{opacity:0}.bfx--js{will-change:transform}@media (prefers-reduced-motion:reduce){.bfx:not(.bfx--force-motion),.bfx:not(.bfx--force-motion) *{animation:none!important;transition:none!important}}