/* 警告訊息進入動畫 */ @keyframes slideDown { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } } /* Toast 進入動畫 */ @keyframes slideIn { from { transform: translateX(400px); opacity: 0; } to { transform: translateX(0); opacity: 1; } } /* Toast 訊息容器樣式 */ .toast-message { position: fixed; top: 20px; right: 20px; padding: 15px 20px; border-radius: 4px; color: white; font-weight: 500; z-index: 9999; animation: slideIn 0.3s ease-out; max-width: 400px; box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); word-wrap: break-word; word-break: break-word; } /* Toast 訊息類型樣式 */ .toast-success { background-color: #28a745; } .toast-error { background-color: #dc3545; } .toast-warning { background-color: #ffc107; color: #333; } .toast-info { background-color: #17a2b8; } /* Vue transition 動畫 */ .toast-enter-active, .toast-leave-active { transition: all 0.3s ease; } .toast-enter, .toast-leave-to { transform: translateX(100%); opacity: 0; }