.metrics-alert { margin-bottom: 10px; } .obs-pane { padding: 4px 16px 0; } .obs-controls { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-bottom: 8px; } .obs-select { min-width: 240px; } .obs-stats { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 12px; opacity: 0.85; } .obs-stamp { opacity: 0.7; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 11.5px; } .obs-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 6px; vertical-align: middle; box-shadow: 0 0 0 3px color-mix(in srgb, var(--ant-color-success) 18%, transparent); } .obs-dot.is-alive { background: var(--ant-color-success); box-shadow: 0 0 0 3px color-mix(in srgb, var(--ant-color-success) 22%, transparent); animation: obs-dot-pulse 2.2s ease-in-out infinite; } .obs-dot.is-dead { background: var(--ant-color-error); box-shadow: 0 0 0 3px color-mix(in srgb, var(--ant-color-error) 22%, transparent); } @keyframes obs-dot-pulse { 0%, 100% { box-shadow: 0 0 0 3px color-mix(in srgb, var(--ant-color-success) 22%, transparent); } 50% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--ant-color-success) 6%, transparent); } } @media (prefers-reduced-motion: reduce) { .obs-dot.is-alive { animation: none; } }