@keyframes wireformSpin{from{transform:rotateY(0deg);}to{transform:rotateY(360deg);}}
@keyframes wireformAssemble{0%,10%{stroke-dasharray:6 900;opacity:0;}35%,65%{stroke-dasharray:900 0;opacity:0.9;}90%,100%{stroke-dasharray:6 900;opacity:0;}}
@keyframes particleFade{0%,10%{opacity:1;}35%,65%{opacity:0;}90%,100%{opacity:1;}}
@keyframes nozzleMove{0%{transform:translateX(60px);}50%{transform:translateX(1140px);}100%{transform:translateX(60px);}}
@keyframes printTrail{0%{stroke-dashoffset:2160;}50%{stroke-dashoffset:0;}100%{stroke-dashoffset:-2160;}}
@keyframes nodePulse{0%,100%{opacity:0.3;}50%{opacity:1;}}
@keyframes penDraw{0%{stroke-dashoffset:1600;}60%,100%{stroke-dashoffset:0;}}
@keyframes ringExpand{0%{r:10;opacity:0.6;}100%{r:260;opacity:0;}}
@keyframes frameHighlight{0%,85%,100%{opacity:0.15;}92%{opacity:0.8;}}
@keyframes apertureBreathe{0%,100%{transform:scale(1);}50%{transform:scale(1.4);}}
.bg-anim{position:fixed;inset:0;width:100vw;height:100vh;z-index:0;pointer-events:none;opacity:0.5;}
