.bg-grid-pattern{background-image:linear-gradient(rgba(255,255,255,.07) 1px,transparent 0),linear-gradient(90deg,rgba(255,255,255,.07) 1px,transparent 0);background-size:25px 25px;animation:grid-move 8s linear infinite}@keyframes grid-move{0%{background-position:0 0}to{background-position:25px 25px}}.imagegen-glow-soft{background-image:conic-gradient(from 90deg at 50% 50%,rgba(168,85,247,.4),rgba(236,72,153,.4),rgba(168,85,247,.4));animation:soft-rotate 12s linear infinite}@keyframes soft-rotate{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.scan-line-tech{position:absolute;top:0;left:0;width:100%;height:2px;background:linear-gradient(90deg,transparent,rgba(236,72,153,.9),rgba(168,85,247,.9),transparent);box-shadow:0 0 10px rgba(236,72,153,.7);animation:scan-tech 3.5s cubic-bezier(.4,0,.2,1) infinite}@keyframes scan-tech{0%{transform:translateY(-10px);opacity:0}10%,90%{opacity:1}to{transform:translateY(100%);opacity:0}}.animate-draw-path{stroke-dasharray:100;stroke-dashoffset:100;animation:draw-path 4s ease-in-out infinite}@keyframes draw-path{0%{stroke-dashoffset:100}50%{stroke-dashoffset:0}to{stroke-dashoffset:-100}}.progress-bar-shine{position:relative;overflow:hidden}.progress-bar-shine:after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background-image:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.3) 50%,rgba(255,255,255,0));background-size:200% 100%;animation:progress-shine 2s linear infinite}@keyframes progress-shine{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes spin-slow{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.animate-spin-slow{animation:spin-slow 20s linear infinite}.typing-indicator{display:flex;align-items:center;justify-content:center;min-width:40px;min-height:20px;gap:5px}.typing-indicator span{display:inline-block;width:8px;height:8px;border-radius:50%;background:linear-gradient(135deg,#A78BFA,#846EFF 50%,#6366F1);box-shadow:0 0 8px rgba(167,139,250,.6);animation:typingBounce 1.4s ease-in-out infinite}.typing-indicator span:first-child{animation-delay:0s}.typing-indicator span:nth-child(2){animation-delay:.16s}.typing-indicator span:nth-child(3){animation-delay:.32s}@keyframes typingBounce{0%,80%,to{transform:translateY(0);opacity:.5;box-shadow:0 0 6px rgba(167,139,250,.4)}40%{transform:translateY(-8px);opacity:1;box-shadow:0 0 12px rgba(167,139,250,.9),0 0 20px rgba(132,110,255,.4)}}