[data-rs-pulse] {
position: relative;
display: inline-flex;
border-radius: var(--pulse-radius);
}
[data-rs-pulse][data-rs-size="sm"] {
width: var(--pulse-size-small);
height: var(--pulse-size-small);
}
[data-rs-pulse][data-rs-size="md"] {
width: var(--pulse-size);
height: var(--pulse-size);
}
[data-rs-pulse][data-rs-size="lg"] {
width: var(--pulse-size-large);
height: var(--pulse-size-large);
}
[data-rs-pulse][data-rs-variant="subtle"] {
background: var(--pulse-bg-subtle);
--pulse-scale: var(--pulse-scale-subtle);
}
[data-rs-pulse][data-rs-variant="default"] {
background: var(--pulse-bg-default);
--pulse-scale: var(--pulse-scale-default);
}
[data-rs-pulse][data-rs-variant="emphasized"] {
background: var(--pulse-bg-emphasized);
box-shadow: var(--pulse-shadow-emphasized) var(--pulse-shadow-color-emphasized);
--pulse-scale: var(--pulse-scale-emphasized);
}
[data-rs-pulse]::before,
[data-rs-pulse]::after {
content: "";
position: absolute;
inset: 0;
border-radius: inherit;
background: inherit;
animation: pulse-ripple var(--pulse-duration) var(--pulse-ease) infinite;
pointer-events: none;
}
[data-rs-pulse]::after {
animation-delay: var(--pulse-delay);
}
[data-rs-pulse][data-rs-speed="slow"] { --pulse-duration: var(--pulse-duration-slow); }
[data-rs-pulse][data-rs-speed="normal"] { --pulse-duration: var(--pulse-duration-normal); }
[data-rs-pulse][data-rs-speed="fast"] { --pulse-duration: var(--pulse-duration-fast); }
[data-rs-pulse][data-rs-state~="active"]::before,
[data-rs-pulse][data-rs-state~="active"]::after {
animation: pulse-ripple var(--pulse-duration) var(--pulse-ease) infinite;
}
@keyframes pulse-ripple {
0% { transform: scale(1); opacity: 1; }
100% { transform: scale(var(--pulse-scale)); opacity: 0; }
}