/* svc-python.html — hero animation (prefix: py-)
   Theme: Request queue → asyncio event loop → Celery workers */

@keyframes pyGlow  { 0%,100% { opacity: 0.08; } 50% { opacity: 0.2; } }
@keyframes pyFade  { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
@keyframes pyReqPulse { 0%,100% { fill: #002E22; } 50% { fill: rgba(60,234,199,0.2); } }
@keyframes pyRingRot { to { transform: rotate(360deg); } }
@keyframes pyFlow  { 0% { stroke-dashoffset: 20; opacity: 0; } 20% { opacity: 1; } 80% { opacity: 1; } 100% { stroke-dashoffset: 0; opacity: 0; } }

.py-glow     { animation: pyGlow 3.5s ease-in-out infinite; }
.py-queue    { animation: pyFade 0.5s var(--ease-spring) 0.4s both; }
.py-core     { animation: pyFade 0.5s var(--ease-spring) 0.8s both; }
.py-worker-1 { animation: pyFade 0.5s var(--ease-spring) 1.05s both; }
.py-worker-2 { animation: pyFade 0.5s var(--ease-spring) 1.25s both; }
.py-worker-3 { animation: pyFade 0.5s var(--ease-spring) 1.45s both; }

.py-req { }
.py-req-1 { animation: pyReqPulse 3s ease-in-out 1.6s infinite; }
.py-req-2 { animation: pyReqPulse 3s ease-in-out 1.8s infinite; }
.py-req-3 { animation: pyReqPulse 3s ease-in-out 2.0s infinite; }
.py-req-4 { animation: pyReqPulse 3s ease-in-out 2.2s infinite; }
.py-req-5 { animation: pyReqPulse 3s ease-in-out 2.4s infinite; }
.py-req-6 { animation: pyReqPulse 3s ease-in-out 2.6s infinite; }

.py-ring { transform-box: fill-box; transform-origin: center; animation: pyRingRot 4s linear 1.7s infinite; }

.py-flow { stroke-dasharray: 6; }
.py-flow-1 { animation: pyFlow 2.4s linear 1.8s infinite; }
.py-flow-2 { animation: pyFlow 2.4s linear 2.0s infinite; }
.py-flow-3 { animation: pyFlow 2.4s linear 2.2s infinite; }
