@import "tailwindcss"; /* ======================================== mozdIT Bt. Design System ======================================== */ /* Design Tokens - Light Theme */ :root { /* Brand Colors */ --color-primary-50: #eff6ff; --color-primary-100: #dbeafe; --color-primary-200: #bfdbfe; --color-primary-300: #93c5fd; --color-primary-400: #60a5fa; --color-primary-500: #3b82f6; --color-primary-600: #2563eb; --color-primary-700: #1d4ed8; --color-primary-800: #1e40af; --color-primary-900: #1e3a8a; --color-primary-950: #172554; /* Accent Colors */ --color-accent-50: #eef2ff; --color-accent-100: #e0e7ff; --color-accent-200: #c7d2fe; --color-accent-500: #6366f1; --color-accent-600: #4f46e5; /* Success Colors */ --color-success-50: #f0fdf4; --color-success-500: #22c55e; --color-success-600: #16a34a; /* Warning Colors */ --color-warning-50: #fffbeb; --color-warning-500: #f59e0b; /* Error Colors */ --color-error-50: #fef2f2; --color-error-500: #ef4444; --color-error-600: #dc2626; /* Neutral Colors - Light Mode */ --color-background: #ffffff; --color-background-secondary: #f9fafb; --color-background-tertiary: #f3f4f6; --color-foreground: #111827; --color-foreground-secondary: #374151; --color-foreground-muted: #6b7280; --color-border: #e5e7eb; --color-border-light: #f3f4f6; /* Shadows */ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1); --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1); /* Transitions */ --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); --transition-normal: 200ms cubic-bezier(0.4, 0, 0.2, 1); --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1); --transition-bounce: 500ms cubic-bezier(0.34, 1.56, 0.64, 1); /* Spacing */ --container-padding: 1rem; --section-spacing: 4rem; /* Border Radius */ --radius-sm: 0.375rem; --radius-md: 0.5rem; --radius-lg: 0.75rem; --radius-xl: 1rem; --radius-full: 9999px; /* Fonts */ --font-sans: var(--font-geist-sans), system-ui, -apple-system, sans-serif; --font-mono: var(--font-geist-mono), 'Fira Code', monospace; } /* Dark Mode */ [data-theme="dark"] { --color-background: #0f172a; --color-background-secondary: #1e293b; --color-background-tertiary: #334155; --color-foreground: #f8fafc; --color-foreground-secondary: #e2e8f0; --color-foreground-muted: #94a3b8; --color-border: #334155; --color-border-light: #1e293b; --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.3); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.3); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.3); --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.5), 0 8px 10px -6px rgb(0 0 0 / 0.4); } /* System preference fallback */ @media (prefers-color-scheme: dark) { :root:not([data-theme="light"]) { --color-background: #0f172a; --color-background-secondary: #1e293b; --color-background-tertiary: #334155; --color-foreground: #f8fafc; --color-foreground-secondary: #e2e8f0; --color-foreground-muted: #94a3b8; --color-border: #334155; --color-border-light: #1e293b; --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.3); --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.4), 0 2px 4px -2px rgb(0 0 0 / 0.3); --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.4), 0 4px 6px -4px rgb(0 0 0 / 0.3); --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.5), 0 8px 10px -6px rgb(0 0 0 / 0.4); } } /* Tailwind Theme Extension */ @theme inline { --color-background: var(--color-background); --color-foreground: var(--color-foreground); --font-sans: var(--font-sans); --font-mono: var(--font-mono); } /* Base Styles */ * { box-sizing: border-box; } html { scroll-behavior: smooth; } body { background: var(--color-background); color: var(--color-foreground); font-family: var(--font-sans); transition: background-color var(--transition-normal), color var(--transition-normal); } /* Selection */ ::selection { background: var(--color-primary-500); color: white; } /* Focus Styles */ :focus-visible { outline: 2px solid var(--color-primary-500); outline-offset: 2px; } /* Custom Scrollbar */ ::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-track { background: var(--color-background-secondary); } ::-webkit-scrollbar-thumb { background: var(--color-border); border-radius: var(--radius-full); } ::-webkit-scrollbar-thumb:hover { background: var(--color-foreground-muted); } /* ======================================== Utility Classes ======================================== */ /* Gradient Backgrounds */ .bg-gradient-hero { background: linear-gradient( 135deg, var(--color-primary-50) 0%, var(--color-accent-50) 50%, var(--color-primary-100) 100% ); } [data-theme="dark"] .bg-gradient-hero { background: linear-gradient( 135deg, var(--color-background-secondary) 0%, var(--color-background-tertiary) 50%, var(--color-background-secondary) 100% ); } /* Glass Effect */ .glass { background: rgba(255, 255, 255, 0.8); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); } [data-theme="dark"] .glass { background: rgba(15, 23, 42, 0.8); } /* ======================================== Animation Keyframes ======================================== */ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeInDown { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideInLeft { from { opacity: 0; transform: translateX(-30px); } to { opacity: 1; transform: translateX(0); } } @keyframes slideInRight { from { opacity: 0; transform: translateX(30px); } to { opacity: 1; transform: translateX(0); } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } @keyframes bounce { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.7; } } @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-5px); } } /* Animation Classes */ .animate-fade-in { animation: fadeIn var(--transition-slow) ease-out forwards; } .animate-fade-in-up { animation: fadeInUp 0.5s ease-out forwards; } .animate-fade-in-down { animation: fadeInDown 0.5s ease-out forwards; } .animate-slide-in-left { animation: slideInLeft 0.5s ease-out forwards; } .animate-slide-in-right { animation: slideInRight 0.5s ease-out forwards; } .animate-scale-in { animation: scaleIn 0.3s ease-out forwards; } .animate-bounce-slow { animation: bounce 2s ease-in-out infinite; } .animate-pulse-slow { animation: pulse 2s ease-in-out infinite; } .animate-float { animation: float 3s ease-in-out infinite; } .animate-spin-slow { animation: spin 3s linear infinite; } /* Staggered animations for children */ .stagger-children > *:nth-child(1) { animation-delay: 0ms; } .stagger-children > *:nth-child(2) { animation-delay: 100ms; } .stagger-children > *:nth-child(3) { animation-delay: 200ms; } .stagger-children > *:nth-child(4) { animation-delay: 300ms; } .stagger-children > *:nth-child(5) { animation-delay: 400ms; } .stagger-children > *:nth-child(6) { animation-delay: 500ms; } /* Hover Animations */ .hover-lift { transition: transform var(--transition-normal), box-shadow var(--transition-normal); } .hover-lift:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); } .hover-scale { transition: transform var(--transition-fast); } .hover-scale:hover { transform: scale(1.02); } .hover-glow { transition: box-shadow var(--transition-normal); } .hover-glow:hover { box-shadow: 0 0 20px rgba(59, 130, 246, 0.3); } /* Button Styles */ .btn { display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; padding: 0.75rem 1.5rem; font-weight: 500; border-radius: var(--radius-md); transition: all var(--transition-normal); cursor: pointer; border: none; text-decoration: none; } .btn:active { transform: scale(0.98); } .btn-primary { background: var(--color-primary-600); color: white; } .btn-primary:hover { background: var(--color-primary-700); box-shadow: 0 4px 12px rgba(37, 99, 235, 0.4); } .btn-secondary { background: transparent; color: var(--color-primary-600); border: 2px solid var(--color-primary-600); } .btn-secondary:hover { background: var(--color-primary-50); } [data-theme="dark"] .btn-secondary:hover { background: var(--color-primary-900); } /* Card Styles */ .card { background: var(--color-background); border: 1px solid var(--color-border); border-radius: var(--radius-xl); padding: 2rem; transition: all var(--transition-normal); } .card:hover { border-color: var(--color-primary-200); box-shadow: var(--shadow-md); } [data-theme="dark"] .card:hover { border-color: var(--color-primary-800); } /* Icon Container */ .icon-container { display: flex; align-items: center; justify-content: center; width: 3rem; height: 3rem; background: var(--color-primary-100); border-radius: var(--radius-lg); transition: all var(--transition-normal); } .icon-container-lg { width: 4rem; height: 4rem; } [data-theme="dark"] .icon-container { background: var(--color-primary-900); } .group:hover .icon-container { background: var(--color-primary-200); transform: scale(1.1); } [data-theme="dark"] .group:hover .icon-container { background: var(--color-primary-800); } /* Section Styles */ .section { padding: var(--section-spacing) 0; } .container { max-width: 80rem; margin: 0 auto; padding: 0 var(--container-padding); } @media (min-width: 640px) { :root { --container-padding: 1.5rem; } } @media (min-width: 1024px) { :root { --container-padding: 2rem; } } /* Link Styles */ .link { color: var(--color-primary-600); text-decoration: none; transition: color var(--transition-fast); position: relative; } .link:hover { color: var(--color-primary-700); } .link-underline::after { content: ''; position: absolute; bottom: -2px; left: 0; width: 0; height: 2px; background: var(--color-primary-600); transition: width var(--transition-normal); } .link-underline:hover::after { width: 100%; } /* Prose adjustments for dark mode */ [data-theme="dark"] .prose { --tw-prose-body: var(--color-foreground-secondary); --tw-prose-headings: var(--color-foreground); --tw-prose-links: var(--color-primary-400); --tw-prose-bold: var(--color-foreground); } /* Reduce motion for accessibility */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } html { scroll-behavior: auto; } }