.relay-card { @apply bg-white border border-gray-200 rounded-lg p-4 shadow-sm mb-4; }
.relay-list { @apply mt-2 divide-y divide-gray-100; }
.relay-item { @apply py-2 flex justify-between items-center text-sm font-mono; }
.btn-icon { @apply p-2 hover:bg-gray-100 rounded-full transition-colors; }
.status-dot { @apply w-3 h-3 rounded-full inline-block mr-2; }
.status-online { @apply bg-green-500; }
.status-offline { @apply bg-red-500; }
.status-pending { @apply bg-yellow-500; }
.btn-primary { @apply px-4 py-2 bg-purple-600 text-white rounded hover:bg-purple-700 disabled:opacity-50 text-sm font-medium; }
.btn-secondary { @apply px-3 py-1 bg-gray-100 text-gray-700 rounded hover:bg-gray-200 text-xs; }
.loader { border-top-color: #7c3aed; animation: spinner 0.6s linear infinite; }
@keyframes spinner { to { transform: rotate(360deg); } }