@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @keyframes rainbow { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } .message { animation: fadeIn 0.3s ease-out; } .bot { position: relative; } .bot:not(:last-child) { margin-bottom: 1.5rem; } .user:not(:last-child) { margin-bottom: 1.5rem; } .bot::after { content: ""; position: absolute; left: -8px; top: 0; width: 8px; height: 12px; background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 12'%3E%3Cpath d='M8 12V0H0l8 12z' fill='%23ffffff'/%3E%3C/svg%3E") no-repeat; background-size: contain; filter: drop-shadow(1px 0 1px rgba(0,0,0,0.1)); } .dark .bot::after { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 12'%3E%3Cpath d='M8 12V0H0l8 12z' fill='%231e293b'/%3E%3C/svg%3E"); filter: drop-shadow(1px 0 1px rgba(0,0,0,0.2)); } .user::before { content: ""; position: absolute; right: -8px; top: 0; width: 8px; height: 12px; background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 12'%3E%3Cpath d='M0 0v12h8L0 0z' fill='%23a855f7'/%3E%3C/svg%3E") no-repeat; background-size: contain; filter: drop-shadow(-1px 0 1px rgba(0,0,0,0.1)); } @keyframes pulse { 0%, 100% { opacity: 0.5; } 50% { opacity: 1; } } .thinking { position: relative; display: inline-block; } .thinking::after { content: "..."; position: absolute; animation: pulse 1.5s infinite; } textarea { min-height: 60px; max-height: 200px; transition: all 0.2s ease; box-shadow: 0 2px 4px rgba(0,0,0,0.05); } .empty i { animation: rainbowPulse 2s infinite; } @keyframes rainbowPulse { 0% { filter: drop-shadow(0 0 5px rgba(168,85,247,0.5)); } 25% { filter: drop-shadow(0 0 5px rgba(236,72,153,0.5)); } 50% { filter: drop-shadow(0 0 5px rgba(59,130,246,0.5)); } 75% { filter: drop-shadow(0 0 5px rgba(16,185,129,0.5)); } 100% { filter: drop-shadow(0 0 5px rgba(168,85,247,0.5)); } } /* Smooth scrolling */ main { scroll-behavior: smooth; }