diff --git a/resources/css/app.css b/resources/css/app.css index 9fde97c..f12718b 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -23,8 +23,89 @@ 'Noto Color Emoji'; } +@custom-variant dark (&:where(.dark, .dark *)); + @layer base { body { font-stretch: 96%; + @apply transition-colors duration-300; } } + +.dark .bg-red-50 { + background-color: rgb(239 68 68 / 0.1); +} +.dark .bg-red-100 { + background-color: rgb(239 68 68 / 0.15); +} +.dark .text-red-600 { + color: rgb(248 113 113); +} +.dark .text-red-700 { + color: rgb(252 165 165); +} + +.dark .bg-blue-50 { + background-color: rgb(59 130 246 / 0.1); +} +.dark .bg-blue-100 { + background-color: rgb(59 130 246 / 0.15); +} +.dark .text-blue-600 { + color: rgb(96 165 250); +} +.dark .text-blue-700 { + color: rgb(147 197 253); +} + +.dark .bg-purple-50 { + background-color: rgb(168 85 247 / 0.1); +} +.dark .bg-purple-100 { + background-color: rgb(168 85 247 / 0.15); +} +.dark .text-purple-600 { + color: rgb(192 132 252); +} +.dark .text-purple-700 { + color: rgb(216 180 254); +} + +.dark .bg-emerald-50 { + background-color: rgb(16 185 129 / 0.1); +} +.dark .bg-emerald-100 { + background-color: rgb(16 185 129 / 0.15); +} +.dark .text-emerald-600 { + color: rgb(52 211 153); +} +.dark .text-emerald-700 { + color: rgb(110 231 183); +} + +.dark .bg-amber-50 { + background-color: rgb(245 158 11 / 0.1); +} +.dark .bg-amber-100 { + background-color: rgb(245 158 11 / 0.15); +} +.dark .text-amber-600 { + color: rgb(251 191 36); +} +.dark .text-amber-700 { + color: rgb(252 211 77); +} + +.dark .bg-green-50 { + background-color: rgb(34 197 94 / 0.1); +} +.dark .bg-green-100 { + background-color: rgb(34 197 94 / 0.15); +} +.dark .text-green-600 { + color: rgb(74 222 128); +} +.dark .text-green-700 { + color: rgb(134 239 172); +} diff --git a/resources/js/app.ts b/resources/js/app.ts index 3894fea..787b2ac 100644 --- a/resources/js/app.ts +++ b/resources/js/app.ts @@ -5,6 +5,17 @@ import AppLayout from './layouts/AppLayout.vue'; const appName = import.meta.env.VITE_APP_NAME || 'Laravel'; +// Apply dark mode before paint to prevent flash +const stored = localStorage.getItem('theme'); + +if ( + stored === 'dark' || + (stored !== 'light' && + window.matchMedia('(prefers-color-scheme: dark)').matches) +) { + document.documentElement.classList.add('dark'); +} + registerSW({ immediate: true }); createInertiaApp({ diff --git a/resources/js/components/AIBanner.vue b/resources/js/components/AIBanner.vue index 8fc5b03..e7da5e7 100644 --- a/resources/js/components/AIBanner.vue +++ b/resources/js/components/AIBanner.vue @@ -6,11 +6,11 @@ import { Sparkles, ArrowRight } from 'lucide-vue-next';