@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}@keyframes slideInLeft{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}@keyframes slideInRight{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@keyframes scaleIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}@keyframes shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-10px)}20%,40%,60%,80%{transform:translate(10px)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes bounce{0%,to{transform:translateY(0)}50%{transform:translateY(-20px)}}@keyframes heartbeat{0%,to{transform:scale(1)}10%,30%{transform:scale(1.1)}20%,40%{transform:scale(1)}}@keyframes typingDots{0%,20%{opacity:.3}50%{opacity:1}to{opacity:.3}}@keyframes skeletonLoading{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes gradientShift{0%{background-position:0% 50%}50%{background-position:100% 50%}to{background-position:0% 50%}}.animate-fade-in{animation:fadeIn .3s ease-out}.animate-slide-up{animation:slideUp .3s ease-out}.animate-slide-down{animation:slideDown .3s ease-out}.animate-slide-in-left{animation:slideInLeft .3s ease-out}.animate-slide-in-right{animation:slideInRight .3s ease-out}.animate-scale-in{animation:scaleIn .3s cubic-bezier(.34,1.56,.64,1)}.animate-shake{animation:shake .5s ease-in-out}.animate-pulse{animation:pulse 2s ease-in-out infinite}.animate-spin{animation:spin 1s linear infinite}.animate-bounce{animation:bounce 1s ease-in-out infinite}.animate-heartbeat{animation:heartbeat 1.5s ease-in-out infinite}.transition-all{transition:all .25s cubic-bezier(.4,0,.2,1)}.transition-colors{transition:color .25s,background-color .25s,border-color .25s}.transition-transform{transition:transform .25s cubic-bezier(.4,0,.2,1)}.transition-opacity{transition:opacity .25s ease-in-out}.hover-lift{transition:transform .2s ease,box-shadow .2s ease}.hover-lift:hover{transform:translateY(-4px);box-shadow:0 12px 24px #00000026}.hover-scale{transition:transform .2s ease}.hover-scale:hover{transform:scale(1.05)}.hover-glow{transition:box-shadow .2s ease}.hover-glow:hover{box-shadow:0 0 20px #1890ff80}.focus-ring:focus{outline:2px solid #1890ff;outline-offset:2px}.focus-ring-error:focus{outline:2px solid #ff4d4f;outline-offset:2px}.skeleton{background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:skeletonLoading 1.5s ease-in-out infinite;border-radius:4px}.gradient-animate{background-size:200% 200%;animation:gradientShift 3s ease infinite}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.line-clamp-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.line-clamp-3{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.hide-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.hide-scrollbar::-webkit-scrollbar{display:none}.smooth-scroll{scroll-behavior:smooth}.no-select{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#f0f2f5}#root{min-height:100vh}.chat-container{display:flex;flex-direction:column;height:calc(100vh - 200px);min-height:400px}.chat-messages{flex:1;overflow-y:auto;padding:16px;background:#f5f5f5;border-radius:8px}.chat-message{margin-bottom:16px;display:flex}.chat-message.user{justify-content:flex-end}.chat-message.assistant{justify-content:flex-start}.message-bubble{max-width:70%;padding:12px 16px;border-radius:12px;white-space:pre-wrap;animation:slideUp .3s ease-out;box-shadow:0 2px 8px #00000014;transition:box-shadow .2s ease}.message-bubble:hover{box-shadow:0 4px 12px #0000001f}.user .message-bubble{background:#1890ff;color:#fff}.assistant .message-bubble{background:#fff;border:1px solid #e8e8e8}.chat-input{margin-top:16px;display:flex;gap:8px}.chat-input .ant-input{flex:1}
