@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap'); @tailwind base; @tailwind components; @tailwind utilities; :root { --bg-primary: #0a0a0b; --bg-secondary: #1a1a1b; --bg-tertiary: #262626; --bg-card: #1e1e1f; --border-primary: #333; --text-primary: #ffffff; --text-secondary: #a1a1aa; --text-accent: #22d3ee; --success: #10b981; --danger: #ef4444; --warning: #f59e0b; --purple: #8b5cf6; --blue: #3b82f6; } * { box-sizing: border-box; } body { font-family: 'Inter', system-ui, sans-serif; background: linear-gradient(135deg, var(--bg-primary) 0%, #0f0f0f 100%); color: var(--text-primary); overflow-x: hidden; } /* Custom scrollbar */ ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-track { background: var(--bg-secondary); } ::-webkit-scrollbar-thumb { background: var(--border-primary); border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: #555; } /* Glass morphism effect */ .glass { background: rgba(26, 26, 27, 0.8); backdrop-filter: blur(20px); border: 1px solid rgba(255, 255, 255, 0.1); } /* Gradient borders */ .gradient-border { position: relative; background: var(--bg-card); border-radius: 12px; } .gradient-border::before { content: ''; position: absolute; inset: 0; padding: 1px; background: linear-gradient(135deg, rgba(34, 211, 238, 0.3), rgba(139, 92, 246, 0.3)); border-radius: inherit; mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); mask-composite: subtract; } /* Button components */ @layer components { .btn { @apply px-4 py-2 rounded-lg font-medium transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-gray-900; } .btn-primary { @apply bg-gradient-to-r from-cyan-500 to-blue-600 hover:from-cyan-600 hover:to-blue-700 text-white shadow-lg hover:shadow-cyan-500/25; } .btn-secondary { @apply bg-gray-700 hover:bg-gray-600 text-gray-100 border border-gray-600; } .btn-success { @apply bg-gradient-to-r from-green-500 to-emerald-600 hover:from-green-600 hover:to-emerald-700 text-white shadow-lg hover:shadow-green-500/25; } .btn-danger { @apply bg-gradient-to-r from-red-500 to-rose-600 hover:from-red-600 hover:to-rose-700 text-white shadow-lg hover:shadow-red-500/25; } .btn-warning { @apply bg-gradient-to-r from-yellow-500 to-orange-600 hover:from-yellow-600 hover:to-orange-700 text-white shadow-lg hover:shadow-yellow-500/25; } .card { @apply bg-gray-900/50 backdrop-blur-sm border border-gray-800 rounded-xl p-6 shadow-xl hover:shadow-2xl transition-all duration-300; } .card-gradient { @apply relative overflow-hidden; background: linear-gradient(135deg, rgba(30, 30, 31, 0.9) 0%, rgba(26, 26, 27, 0.9) 100%); } .card-gradient::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 1px; background: linear-gradient(90deg, transparent, rgba(34, 211, 238, 0.5), transparent); } .status-indicator { @apply inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium; } .status-online { @apply bg-green-100 text-green-800 border border-green-200; } .status-offline { @apply bg-red-100 text-red-800 border border-red-200; } .status-pending { @apply bg-yellow-100 text-yellow-800 border border-yellow-200; } } /* Animations */ @keyframes pulse-glow { 0%, 100% { box-shadow: 0 0 5px rgba(34, 211, 238, 0.5); } 50% { box-shadow: 0 0 20px rgba(34, 211, 238, 0.8), 0 0 30px rgba(34, 211, 238, 0.4); } } .pulse-glow { animation: pulse-glow 2s ease-in-out infinite; } @keyframes slide-up { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .slide-up { animation: slide-up 0.6s ease-out; } /* Loading spinner */ .spinner { @apply inline-block w-4 h-4 border-2 border-gray-300 border-t-cyan-500 rounded-full animate-spin; }