@keyframes typing { from { width: 0 } to { width: 100% } } @keyframes blink-caret { from, to { border-color: transparent } 50% { border-color: white } } .typing-effect { overflow: hidden; white-space: nowrap; border-right: 2px solid; animation: typing 3.5s steps(40, end), blink-caret .75s step-end infinite; } .source-badge { transition: all 0.3s ease; } .source-badge:hover { transform: translateY(-2px); box-shadow: 0 4px 6px rgba(255, 255, 255, 0.1); } .search-process { background: linear-gradient(90deg, #333333, #555555, #333333); background-size: 200% 100%; animation: shimmer 1.5s infinite linear; } @keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }