@import 'tailwindcss'; @custom-variant dark (&:where(.dark, .dark *)); /* Dark mode transition */ html, body { transition: background-color 0.3s ease, color 0.3s ease; -webkit-tap-highlight-color: transparent; /* Remove tap highlight on mobile */ } html.theme-transition * { transition: none !important; } /* Additional dark mode styles */ body.dark-mode { background-color: #111827; color: #e5e7eb; } /* Force dark mode styles */ html.dark { color-scheme: dark; } /* Mobile touch improvements */ @media (max-width: 640px) { input, select, button { font-size: 16px !important; /* Prevent iOS zoom on focus */ } .touch-manipulation { touch-action: manipulation; /* Improve touch responsiveness */ } } @layer components { .btn { @apply inline-flex items-center justify-center gap-2 px-4 py-2 text-sm rounded-lg transition-all cursor-pointer font-medium focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-50 disabled:cursor-not-allowed active:scale-95; } .btn-primary { @apply bg-gray-900 text-white hover:bg-gray-800 dark:bg-gray-100 dark:text-gray-900 dark:hover:bg-gray-200; } .btn-secondary { @apply bg-white text-gray-700 border border-gray-200 hover:bg-gray-50 hover:shadow-sm dark:bg-gray-800 dark:text-gray-200 dark:border-gray-700 dark:hover:bg-gray-700; } .btn-ghost { @apply text-gray-600 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800; } .btn-danger { @apply text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/30; } .btn-dark { @apply bg-gray-700 text-white hover:bg-gray-800 dark:bg-gray-600 dark:hover:bg-gray-700; } .btn-sm { @apply px-3 py-1.5 text-xs; } .btn-md { @apply px-4 py-2 text-sm; } .btn-icon { @apply p-2; } .btn-icon-sm { @apply p-1.5; } .btn-icon-xs { @apply p-1; } .input-field { @apply px-2 py-1 text-sm border border-gray-300 rounded outline-none focus:ring-2 focus:ring-gray-500 dark:border-gray-600 dark:bg-gray-700 dark:text-gray-100; } .card { @apply bg-white dark:bg-gray-800 border border-gray-200 dark:border-gray-700 rounded-lg; } /* Custom prose styles for blog content */ .prose { @apply text-gray-700 dark:text-gray-300 leading-7; } .prose h1 { @apply text-4xl font-bold text-gray-900 dark:text-white mb-4 mt-0; } .prose h2 { @apply text-3xl font-bold text-gray-900 dark:text-white mt-8 mb-4; } .prose h3 { @apply text-2xl font-bold text-gray-900 dark:text-white mt-6 mb-3; } .prose h4 { @apply text-xl font-bold text-gray-900 dark:text-white mt-4 mb-2; } .prose p { @apply text-gray-700 dark:text-gray-300 mb-4 leading-7; } .prose a { @apply text-blue-600 dark:text-blue-400 underline hover:text-blue-800 dark:hover:text-blue-300; } .prose strong { @apply text-gray-900 dark:text-white font-semibold; } .prose em { @apply italic; } .prose code { @apply text-sm font-mono bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-gray-100 px-1 py-0.5 rounded; } .prose pre { @apply bg-gray-100 dark:bg-gray-800 text-gray-800 dark:text-gray-200 p-4 rounded-lg overflow-x-auto mb-4; } .prose pre code { @apply bg-transparent p-0; } .prose ul { @apply list-disc pl-6 mb-4 text-gray-700 dark:text-gray-300; } .prose ol { @apply list-decimal pl-6 mb-4 text-gray-700 dark:text-gray-300; } .prose li { @apply mb-2 leading-7; } .prose blockquote { @apply border-l-4 border-gray-300 dark:border-gray-600 pl-4 italic text-gray-600 dark:text-gray-400 my-4; } .prose img { @apply rounded-lg shadow-md my-6; } .prose hr { @apply border-gray-300 dark:border-gray-700 my-8; } .prose table { @apply border-collapse w-full my-6; } .prose th { @apply bg-gray-100 dark:bg-gray-800 p-2 text-left font-semibold border border-gray-300 dark:border-gray-700; } .prose td { @apply border border-gray-300 dark:border-gray-700 p-2; } }