Files

145 lines
2.6 KiB
CSS

.chat-fab-btn {
display: flex;
align-items: center;
justify-content: center;
width: 56px;
height: 56px;
border-radius: 16px;
border: none;
background: var(--color-blue, #3b82f6);
color: #fff;
cursor: pointer;
box-shadow: 0 4px 16px rgba(59, 130, 246, 0.4);
transition:
transform 180ms cubic-bezier(0.32, 0.72, 0, 1),
box-shadow 180ms ease;
position: relative;
outline-offset: 3px;
flex-shrink: 0;
}
.chat-fab-btn:hover {
transform: scale(1.09);
box-shadow: 0 6px 22px rgba(59, 130, 246, 0.52);
}
.chat-fab-btn:active {
transform: scale(0.96);
transition-duration: 90ms;
}
/* Animated logo paths when the agent is actively working */
.chat-fab-btn--loading svg path:first-child {
animation: chat-fab-logo-right 2s ease-in-out infinite;
}
.chat-fab-btn--loading svg path:last-child {
animation: chat-fab-logo-left 2s ease-in-out infinite;
}
@keyframes chat-fab-logo-right {
0%,
100% {
transform: translate(0, 0);
opacity: 0.5;
}
25% {
transform: translate(-1px, -5px);
opacity: 0.45;
}
50% {
transform: translate(-6px, 0);
opacity: 0.9;
}
75% {
transform: translate(-1px, 5px);
opacity: 0.55;
}
}
@keyframes chat-fab-logo-left {
0%,
100% {
transform: translate(0, 0);
opacity: 1;
}
25% {
transform: translate(1px, 5px);
opacity: 0.85;
}
50% {
transform: translate(6px, 0);
opacity: 0.5;
}
75% {
transform: translate(1px, -5px);
opacity: 0.85;
}
}
/* Green pulse dot when the agent is actively working */
.chat-fab-btn__pulse {
position: absolute;
top: 9px;
right: 9px;
width: 8px;
height: 8px;
border-radius: 50%;
background: #22c55e;
animation: chat-fab-pulse 1.5s ease-in-out infinite;
}
@keyframes chat-fab-pulse {
0%,
100% {
transform: scale(1);
opacity: 1;
}
50% {
transform: scale(1.35);
opacity: 0.65;
}
}
/* Tick badge shown when there's an unread result */
.chat-fab-btn__tick {
position: absolute;
top: 9px;
right: 9px;
width: 16px;
height: 16px;
border-radius: 50%;
background: #22c55e;
display: flex;
align-items: center;
justify-content: center;
animation: chat-fab-tick-in 220ms cubic-bezier(0.32, 0.72, 0, 1) both;
}
@keyframes chat-fab-tick-in {
from {
transform: scale(0);
opacity: 0;
}
to {
transform: scale(1);
opacity: 1;
}
}
@media (prefers-reduced-motion: reduce) {
.chat-fab-btn {
transition: none;
}
.chat-fab-btn__pulse {
animation: none;
}
.chat-fab-btn--loading svg path:first-child,
.chat-fab-btn--loading svg path:last-child {
animation: none;
}
.chat-fab-btn__tick {
animation: none;
}
}