@tailwind base; @tailwind components; @tailwind utilities; @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500&display=swap'); @layer base { body { @apply font-sans text-sm leading-relaxed text-slate-700; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } h1 { @apply text-2xl font-bold tracking-tight text-slate-900; } h2 { @apply text-lg font-semibold text-slate-900; } h3 { @apply text-base font-semibold text-slate-900; } } @layer utilities { .text-shadow-sm { text-shadow: 0 1px 2px rgba(0,0,0,0.1); } .animate-in { animation: animateIn 0.2s ease-out; } .fade-in { animation: fadeIn 0.3s ease-out; } .slide-in-from-top-2 { animation: slideInFromTop2 0.2s ease-out; } .glass { backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); } } @keyframes animateIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideInFromTop2 { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: translateY(0); } } @layer components { .card { @apply bg-white rounded-xl border border-slate-200 shadow-sm overflow-hidden; } .card-header { @apply px-5 py-4 border-b border-slate-100 flex items-center gap-2; } .card-body { @apply p-5; } .btn-primary { @apply inline-flex items-center gap-2 rounded-lg bg-brand-600 px-5 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-brand-700 focus:outline-none focus:ring-2 focus:ring-brand-500 focus:ring-offset-2 transition-colors disabled:opacity-50 disabled:cursor-not-allowed; } .btn-secondary { @apply inline-flex items-center gap-2 rounded-lg border border-slate-300 bg-white px-4 py-2 text-sm font-medium text-slate-700 hover:bg-slate-50 focus:outline-none focus:ring-2 focus:ring-brand-500 focus:ring-offset-2 transition-colors disabled:opacity-50 disabled:cursor-not-allowed; } .btn-ghost { @apply inline-flex items-center gap-2 rounded-lg px-3 py-2 text-sm font-medium text-slate-600 hover:text-slate-800 hover:bg-slate-50 focus:outline-none transition-colors disabled:opacity-50 disabled:cursor-not-allowed; } .input-field { @apply block w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm placeholder:text-slate-400 focus:border-brand-500 focus:ring-2 focus:ring-brand-500/20 transition-colors disabled:bg-slate-50 disabled:cursor-not-allowed; } .input-field:focus { @apply outline-none; } .select-field { @apply block w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm focus:border-brand-500 focus:ring-2 focus:ring-brand-500/20 transition-colors disabled:bg-slate-50 disabled:cursor-not-allowed; } .select-field:focus { @apply outline-none; } .badge { @apply inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium; } .badge-success { @apply badge bg-emerald-50 text-emerald-700 border border-emerald-200; } .badge-error { @apply badge bg-red-50 text-red-700 border border-red-200; } .badge-warning { @apply badge bg-amber-50 text-amber-700 border border-amber-200; } .badge-info { @apply badge bg-sky-50 text-sky-700 border border-sky-200; } .badge-neutral { @apply badge bg-slate-100 text-slate-600 border border-slate-200; } .log-entry { @apply font-mono text-xs leading-6; } .log-info { @apply log-entry text-slate-600; } .log-error { @apply log-entry text-red-600; } .log-success { @apply log-entry text-emerald-600; } .log-warn { @apply log-entry text-amber-600; } .scrollbar-thin::-webkit-scrollbar { width: 6px; height: 6px; } .scrollbar-thin::-webkit-scrollbar-track { background: transparent; } .scrollbar-thin::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 3px; } .scrollbar-thin::-webkit-scrollbar-thumb:hover { background: #94a3b8; } .divider-x { @apply h-px bg-slate-200 my-4; } .divider-y { @apply w-px bg-slate-200 mx-4; } .status-dot { @apply w-2 h-2 rounded-full inline-block; } .status-dot-pulse { @apply w-2 h-2 rounded-full inline-block animate-pulse; } .hero-gradient { background: linear-gradient(135deg, #1e293b 0%, #0f172a 50%, #1e1b4b 100%); } .brand-gradient { background: linear-gradient(135deg, #4f46e5 0%, #6366f1 50%, #818cf8 100%); } .shadow-brand-sm { box-shadow: 0 2px 8px -1px rgba(79, 70, 229, 0.2), 0 1px 3px -2px rgba(79, 70, 229, 0.1); } .ring-brand-focus { @apply focus:outline-none focus:ring-2 focus:ring-brand-500 focus:ring-offset-2; } .hover-lift { @apply transition-transform duration-200 hover:-translate-y-0.5 hover:shadow-md; } } /* Syntax highlighting colors */ .token-keyword { color: #c678dd; } .token-string { color: #98c379; } .token-number { color: #d19a66; } .token-comment { color: #5c6370; font-style: italic; } .token-function { color: #61afef; } .token-operator { color: #56b6c2; } .token-class { color: #e5c07b; } .token-variable { color: #e06c75; } .token-tag { color: #e06c75; } .token-attr { color: #d19a66; } .token-punctuation { color: #abb2bf; }