canonrs-server 0.1.0

CanonRS server-side rendering support
/* ============================================
   STATUS DOT
   Domain: User Presence
   ============================================ */

[data-rs-status-dot] {
  display: inline-block;
  width: var(--status-dot-size);
  height: var(--status-dot-size);
  border-radius: var(--status-dot-radius);
}

/* Stable states — no animation */
[data-rs-status-dot][data-rs-variant="online"] {
  background: var(--status-dot-bg-online);
}

[data-rs-status-dot][data-rs-variant="offline"] {
  background: var(--status-dot-bg-offline);
}

[data-rs-status-dot][data-rs-variant="away"] {
  background: var(--status-dot-bg-away);
}

/* busy — solid red */
[data-rs-status-dot][data-rs-variant="busy"] {
  background: var(--status-dot-bg-busy);
}

/* do-not-disturb — red with opacity to differentiate from busy */
[data-rs-status-dot][data-rs-variant="do-not-disturb"] {
  background: var(--status-dot-bg-do-not-disturb);
  opacity: 0.6;
}

/* Transitional states — animation allowed */
[data-rs-status-dot][data-rs-variant="connecting"],
[data-rs-status-dot][data-rs-state~="connecting"] {
  background: var(--status-dot-bg-online);
  animation: status-dot-pulse var(--motion-duration-slow) var(--motion-ease-standard) infinite;
}

[data-rs-status-dot][data-rs-variant="syncing"],
[data-rs-status-dot][data-rs-state~="syncing"] {
  background: var(--status-dot-bg-away);
  animation: status-dot-pulse var(--motion-duration-slow) var(--motion-ease-standard) infinite;
}

/* Pulse Animation — transitional only */
@keyframes status-dot-pulse {
  0%, 100% { opacity: 1; }
  50%       { opacity: 0.4; }
}