/* ============================================ DESIGN TOKENS - SaaS Premium Design System ============================================ */ @theme { /* === SPACING SCALE (8px grid base) === */ /* * Action 11.2.1.2: Verified spacing scale alignment to 8px grid * * Tailwind v4 automatically generates spacing utilities from these CSS variables. * * 8px GRID ALIGNMENT: * ✅ 8px-aligned values: spacing-0 (0px), spacing-2 (8px), spacing-4 (16px), spacing-6 (24px), * spacing-8 (32px), spacing-12 (48px), spacing-16 (64px), spacing-24 (96px) * ⚠️ Not 8px-aligned: spacing-1 (4px), spacing-3 (12px), spacing-5 (20px), spacing-10 (40px), spacing-20 (80px) * * NUMERIC SCALE (for precise control): * - Use numeric values (0-24) when you need specific pixel values * - Examples: gap-4, p-6, m-2, px-8, py-12 * - Available utilities: gap-*, p-*, m-*, px-*, py-*, mx-*, my-*, space-x-*, space-y-* * - PREFERRED (8px-aligned): gap-2 (8px), gap-4 (16px), gap-6 (24px), gap-8 (32px), gap-12 (48px), gap-16 (64px), gap-24 (96px) * - AVOID (not 8px-aligned): gap-1 (4px), gap-3 (12px), gap-5 (20px), gap-10 (40px), gap-20 (80px) * * SEMANTIC SCALE (for design system consistency): * - Use semantic names when you want design-system-aligned spacing * - Examples: gap-md, p-lg, m-sm, px-xl * - Available utilities: gap-xs, gap-sm, gap-md, gap-lg, gap-xl, gap-2xl, gap-3xl, gap-4xl, gap-5xl, gap-xxl * (and same for p-*, m-*, px-*, py-*, mx-*, my-*, space-x-*, space-y-*) * - ✅ 8px-aligned: gap-sm (8px), gap-md (16px), gap-lg (24px), gap-xl (32px), gap-2xl (48px), gap-3xl (64px) * - ⚠️ Not 8px-aligned: gap-xs (4px), gap-4xl (80px) * * RECOMMENDED USAGE: * - Prefer 8px-aligned values for visual rhythm (gap-2, gap-4, gap-6, gap-8, gap-12, gap-16, gap-24) * - Use non-8px values (gap-1, gap-3, gap-5, gap-10, gap-20) sparingly, only when absolutely necessary * - Avoid arbitrary values (gap-[7px], p-[9px]) - use nearest 8px-aligned value instead * - See GRID_SYSTEM.md for complete guidelines */ /* Numeric scale (for precise control) */ --spacing-0: 0; --spacing-1: 0.25rem; /* 4px */ --spacing-2: 0.5rem; /* 8px */ --spacing-3: 0.75rem; /* 12px */ --spacing-4: 1rem; /* 16px */ --spacing-5: 1.25rem; /* 20px */ --spacing-6: 1.5rem; /* 24px */ --spacing-8: 2rem; /* 32px */ --spacing-10: 2.5rem; /* 40px */ --spacing-12: 3rem; /* 48px */ --spacing-16: 4rem; /* 64px */ --spacing-20: 5rem; /* 80px */ --spacing-24: 6rem; /* 96px */ /* Semantic scale (for design system consistency) */ --spacing-xs: 0.25rem; /* 4px - Extra small spacing */ --spacing-sm: 0.5rem; /* 8px - Small spacing */ --spacing-md: 1rem; /* 16px - Medium spacing (base) */ --spacing-lg: 1.5rem; /* 24px - Large spacing */ --spacing-xl: 2rem; /* 32px - Extra large spacing */ --spacing-2xl: 3rem; /* 48px - 2X large spacing */ --spacing-3xl: 4rem; /* 64px - 3X large spacing */ --spacing-4xl: 5rem; /* 80px - 4X large spacing */ --spacing-5xl: 6rem; /* 96px - 5X large spacing */ --spacing-xxl: 6rem; /* 96px - Extra extra large spacing (alias for 5xl) */ /* === SECTION SPACING === */ /* * Action 11.4.3.4: Consistent section spacing utility * * Standard spacing between major sections on pages. * Aligns to 8px grid system (32px = 4× base). * * Usage: * - Use for spacing between major page sections * - Example: space-y-[var(--section-spacing)] * - Or use Tailwind utility: space-y-8 (which equals 32px) * * Values: * - Standard: 32px (4× base) - Most common section spacing * - Large: 48px (6× base) - For major page containers (e.g., DashboardPage) */ --section-spacing: 2rem; /* 32px - Standard section spacing (4× base) */ --section-spacing-lg: 3rem; /* 48px - Large section spacing (6× base) */ /* === TYPOGRAPHY SCALE === */ --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; --font-mono: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace; /* Font Sizes */ --text-xs: 0.75rem; /* 12px */ --text-sm: 0.875rem; /* 14px */ --text-base: 1rem; /* 16px */ --text-lg: 1.125rem; /* 18px */ --text-xl: 1.25rem; /* 20px */ --text-2xl: 1.5rem; /* 24px */ --text-3xl: 1.875rem; /* 30px */ --text-4xl: 2.25rem; /* 36px */ --text-5xl: 3rem; /* 48px */ /* Font Weights */ --font-normal: 400; --font-medium: 500; --font-semibold: 600; --font-bold: 700; /* Line Heights */ --leading-tight: 1.25; --leading-normal: 1.5; --leading-relaxed: 1.75; /* === BORDER RADIUS === */ --radius-sm: 0.375rem; /* 6px */ --radius-md: 0.5rem; /* 8px */ --radius-lg: 0.75rem; /* 12px */ --radius-xl: 1rem; /* 16px */ --radius-2xl: 1.5rem; /* 24px */ --radius-full: 9999px; /* === SHADOWS === */ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); --shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25); /* Premium Glow Effects */ --shadow-glow-cyan: 0 0 20px rgba(102, 252, 241, 0.3); --shadow-glow-cyan-lg: 0 0 40px rgba(102, 252, 241, 0.4); --shadow-glow-magenta: 0 0 20px rgba(138, 126, 164, 0.3); /* === TRANSITIONS === */ --transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1); --transition-base: 200ms cubic-bezier(0.4, 0, 0.2, 1); --transition-slow: 300ms cubic-bezier(0.4, 0, 0.2, 1); --transition-slower: 500ms cubic-bezier(0.4, 0, 0.2, 1); /* === GLASSMORPHISM === */ --glass-bg: rgba(255, 255, 255, 0.05); --glass-border: rgba(255, 255, 255, 0.1); --glass-blur: blur(12px); --glass-bg-hover: rgba(255, 255, 255, 0.08); --glass-border-hover: rgba(255, 255, 255, 0.15); /* === Z-INDEX SCALE === */ --z-base: 0; --z-dropdown: 1000; --z-sticky: 1020; --z-fixed: 1030; --z-modal-backdrop: 1040; --z-modal: 1050; --z-popover: 1060; --z-tooltip: 1070; --z-notification: 1080; } /* === UTILITY CLASSES === */ /* Glassmorphism */ .glass { background: var(--glass-bg); border: 1px solid var(--glass-border); backdrop-filter: var(--glass-blur); -webkit-backdrop-filter: var(--glass-blur); } .glass-hover:hover { background: var(--glass-bg-hover); border-color: var(--glass-border-hover); } /* Smooth Animations */ .animate-fade-in { animation: fadeIn 0.3s ease-in-out; } .animate-slide-up { animation: slideUp 0.3s ease-out; } .animate-scale-in { animation: scaleIn 0.2s ease-out; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } /* Hover Effects */ .hover-lift { transition: transform var(--transition-base), box-shadow var(--transition-base); } .hover-lift:hover { transform: translateY(-2px); box-shadow: var(--shadow-lg); } /* Premium Glow Effects */ .glow-cyan { box-shadow: 0 0 20px rgba(102, 252, 241, 0.3), 0 0 40px rgba(102, 252, 241, 0.1); } .glow-cyan-lg { box-shadow: 0 0 30px rgba(102, 252, 241, 0.5), 0 0 60px rgba(102, 252, 241, 0.2); } /* Smooth Scroll */ .smooth-scroll { scroll-behavior: smooth; -webkit-overflow-scrolling: touch; } /* Loading States */ @keyframes shimmer { 0% { background-position: -1000px 0; } 100% { background-position: 1000px 0; } } .shimmer { animation: shimmer 2s infinite linear; background: linear-gradient( to right, rgba(255, 255, 255, 0.05) 0%, rgba(255, 255, 255, 0.1) 50%, rgba(255, 255, 255, 0.05) 100% ); background-size: 1000px 100%; } /* Pulse Glow */ @keyframes pulse-glow { 0%, 100% { opacity: 1; box-shadow: 0 0 10px rgba(102, 252, 241, 0.3); } 50% { opacity: 0.8; box-shadow: 0 0 20px rgba(102, 252, 241, 0.6); } } .pulse-glow { animation: pulse-glow 2s ease-in-out infinite; } /* Focus States */ .focus-ring { outline: 2px solid transparent; outline-offset: 2px; transition: outline-color var(--transition-fast); } .focus-ring:focus-visible { outline-color: rgb(var(--kodo-cyan)); outline-width: 2px; }