/* Shared chrome for the cursor party — loaded on every page. */

.presence-layer {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 2147483000;
  overflow: hidden;
}

.presence-cursor {
  position: absolute;
  top: 0;
  left: 0;
  will-change: transform;
  transition: transform 90ms linear;
  filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.4));
}

.presence-name {
  display: inline-block;
  transform: translate(14px, -2px);
  padding: 1px 6px;
  border-radius: 999px;
  font: 600 11px/1.5 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  color: #10121a;
  white-space: nowrap;
}

.presence-ripple {
  position: absolute;
  width: 14px;
  height: 14px;
  margin: -7px 0 0 -7px;
  border: 2px solid currentColor;
  border-radius: 50%;
  animation: presence-pop 700ms ease-out forwards;
}

@keyframes presence-pop {
  from { transform: scale(0.3); opacity: 0.9; }
  to   { transform: scale(3.2); opacity: 0; }
}

/* Small "N others here" badge, styled per page via --presence-* vars. */
.presence-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.5em;
  font: 600 12px/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  letter-spacing: 0.04em;
}

.presence-badge::before {
  content: '';
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #ff4d4d;
  box-shadow: 0 0 8px currentColor;
}

.presence-badge.is-online::before {
  background: #3ddc97;
  animation: presence-pulse 2s ease-in-out infinite;
}

@keyframes presence-pulse {
  50% { opacity: 0.35; }
}

@media (prefers-reduced-motion: reduce) {
  .presence-cursor { transition: none; }
  .presence-ripple { animation-duration: 1ms; }
  .presence-badge.is-online::before { animation: none; }
}
