@import "tailwindcss"; /* Import fonts */ @import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700&family=Noto+Sans:wght@400;500;600;700&display=swap'); /* Material Icons */ @import url('https://fonts.googleapis.com/icon?family=Material+Icons|Material+Icons+Outlined'); /* Theme configuration using CSS variables */ @theme { --color-border: hsl(214.3 31.8% 91.4%); --color-input: hsl(214.3 31.8% 91.4%); --color-ring: hsl(207 90% 50%); --color-background: hsl(0 0% 100%); --color-foreground: hsl(222.2 84% 4.9%); --color-primary: hsl(207 90% 50%); --color-primary-foreground: hsl(210 40% 98%); --color-secondary: hsl(210 40% 96.1%); --color-secondary-foreground: hsl(222.2 47.4% 11.2%); --color-muted: hsl(210 40% 96.1%); --color-muted-foreground: hsl(215.4 16.3% 46.9%); --color-accent: hsl(210 40% 96.1%); --color-accent-foreground: hsl(222.2 47.4% 11.2%); --color-destructive: hsl(0 84.2% 60.2%); --color-destructive-foreground: hsl(210 40% 98%); --color-card: hsl(0 0% 100%); --color-card-foreground: hsl(222.2 84% 4.9%); --color-popover: hsl(0 0% 100%); --color-popover-foreground: hsl(222.2 84% 4.9%); --radius: 0.5rem; --radius-lg: 0.75rem; --radius-md: calc(var(--radius) - 2px); --radius-sm: calc(var(--radius) - 4px); --font-family-sans: 'Plus Jakarta Sans', 'Noto Sans', sans-serif; } /* Dark mode */ .dark { --color-border: hsl(0 0% 25%); --color-input: hsl(0 0% 25%); --color-ring: hsl(207 90% 50%); --color-background: hsl(0 0% 10%); --color-foreground: hsl(210 40% 98%); --color-primary: hsl(207 90% 50%); --color-primary-foreground: hsl(210 40% 98%); --color-secondary: hsl(0 0% 20%); --color-secondary-foreground: hsl(210 40% 98%); --color-muted: hsl(0 0% 20%); --color-muted-foreground: hsl(215 20.2% 65.1%); --color-accent: hsl(0 0% 20%); --color-accent-foreground: hsl(210 40% 98%); --color-destructive: hsl(0 62.8% 50.6%); --color-destructive-foreground: hsl(210 40% 98%); --color-card: hsl(0 0% 15%); --color-card-foreground: hsl(210 40% 98%); --color-popover: hsl(0 0% 15%); --color-popover-foreground: hsl(210 40% 98%); } /* Base styles */ * { border-color: var(--color-border); } body { background-color: var(--color-background); color: var(--color-foreground); font-family: var(--font-family-sans); margin: 0; min-height: 100vh; } /* Material Icons */ .material-icons, .material-icons-outlined { font-family: 'Material Icons'; font-weight: normal; font-style: normal; font-size: 24px; line-height: 1; letter-spacing: normal; text-transform: none; display: inline-block; white-space: nowrap; word-wrap: normal; direction: ltr; -webkit-font-feature-settings: 'liga'; -webkit-font-smoothing: antialiased; } .material-icons-outlined { font-family: 'Material Icons Outlined'; } /* Invert pattern previews in dark mode */ .dark .pattern-preview { filter: invert(1); } /* Marquee animation for scrolling text */ @keyframes marquee { 0%, 10% { transform: translateX(calc(-100% + 100cqw)); } 45%, 55% { transform: translateX(0); } 90%, 100% { transform: translateX(calc(-100% + 100cqw)); } } .marquee-container { container-type: inline-size; overflow: hidden; } .animate-marquee { display: inline-block; animation: marquee 8s ease-in-out infinite; animation-play-state: running; } .animate-marquee:hover { animation-play-state: paused; } /* Smooth fade in for lazy-loaded content */ @keyframes fadeIn { from { opacity: 0; transform: scale(0.98); } to { opacity: 1; transform: scale(1); } } .animate-fade-in { animation: fadeIn 0.2s ease-out forwards; } /* Subtle pulse for connection status */ @keyframes subtle-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.6; } } .animate-subtle-pulse { animation: subtle-pulse 2s ease-in-out infinite; } /* Slide in from right for panels */ @keyframes slideInRight { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } .animate-slide-in-right { animation: slideInRight 0.3s ease-out forwards; }