py-trade / src /app /chatbot /chatbot.scss
Oviya
update chatbot ui
becf4e3
/* Container */
.chat-container {
overflow-y: overlay;
padding-top: 10vw;
height: 30vw;
}
/* Message wrapper */
.chat-message {
display: flex;
flex-direction: column;
gap: 6px;
animation: fadeIn 0.25s ease-out;
max-width: 100%;
}
.user-message,
.bot-message {
display: flex;
align-items: center;
padding: 12px 20px;
gap: 2vw;
}
.user-message {
justify-content: flex-start;
}
.bot-message {
justify-content: flex-end;
align-self: flex-end;
}
.avatar {
width: 40px;
height: 40px;
border-radius: 50%;
overflow: hidden;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.avatar img {
width: 100%;
height: 100%;
object-fit: cover;
}
.user-message .message-content,
.bot-message .message-content {
padding: 12px 20px;
border-radius: 10px;
box-shadow: 0 4px 10px rgba(0,0,0,0.1);
width: 50%;
markdown {
font-family: 'Roboto', sans-serif;
color: #333;
font-size: 1vw;
line-height: 1.5;
}
}
.user-message .message-content {
background-color: #f4f4f4;
width: auto;
}
.bot-message .message-content {
background-color: #f4f4f4;
}
.message-content p {
margin: 0;
color: #333;
font-size: 1vw;
line-height: 1.5;
}
/* Input */
.input-box {
display: flex;
gap: 1vw;
padding: 2vw;
border-top: 1px solid #ddd;
background-color: #fff;
position: absolute;
bottom: 0;
width: -webkit-fill-available;
}
.input-box input {
flex: 1 1 auto;
padding: 1vw;
font-size: 1vw;
border-radius: 12px;
border: 1px solid #ddd;
box-shadow: 0 4px 6px rgba(0,0,0,0.05);
outline: none;
transition: border 0.3s ease;
font-family: 'Roboto', sans-serif;
}
.input-box input:focus {
border-color: #4e8fff;
box-shadow: 0 4px 10px rgba(78,143,255,0.3);
}
.input-box button {
padding: 1vw;
background-color: #4e8fff;
color: #fff;
border: none;
border-radius: 12px;
cursor: pointer;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
transition: background-color 0.3s ease;
font-family: "Roboto", sans-serif;
font-weight: bold;
font-size: 1vw;
}
.input-box button:hover {
background-color: #1e6ab2;
}
/* Typing dots */
.typing {
display: inline-flex;
align-items: center;
gap: 6px;
height: 1em;
}
.typing span {
width: 6px;
height: 6px;
border-radius: 50%;
background: #333;
display: inline-block;
animation: bounce 1s infinite ease-in-out;
}
.typing span:nth-child(2) {
animation-delay: 0.15s;
}
.typing span:nth-child(3) {
animation-delay: 0.30s;
}
@keyframes bounce {
0%, 80%, 100% {
transform: translateY(0);
opacity: 0.4;
}
40% {
transform: translateY(-6px);
opacity: 1;
}
}
/* Enter animation */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}