# Portfolio Design System ## Color Palette ### Primary Colors - **Blue**: `blue-600` (primary actions, links, accents) - **Purple**: `purple-600` (gradients, secondary accents) - **Green**: `green-500` (live status, success) ### Neutral Colors - **Light Mode**: - Background: `white`, `gray-50` - Text Primary: `gray-900` - Text Secondary: `gray-600`, `gray-700` - Borders: `gray-200`, `gray-300` - **Dark Mode**: - Background: `gray-950`, `gray-900` - Text Primary: `white` - Text Secondary: `gray-400`, `gray-300` - Borders: `gray-800`, `gray-700` ### Status Colors - Live: `green-100/900` bg, `green-800/200` text - Building: `blue-100/900` bg, `blue-800/200` text - Planning: `gray-100/800` bg, `gray-800/200` text ### Timeline Colors (gradients) - riotpiao.com: `from-green-500 to-green-600` - RBC: `from-red-500 to-red-600` - AWS: `from-orange-500 to-orange-600` - Titus: `from-cyan-500 to-cyan-600` - NAV Canada: `from-blue-500 to-blue-600` --- ## Typography ### Font Sizes - Hero Title: `text-4xl md:text-5xl font-bold` - Section Title: `text-4xl font-bold` - Card Title: `text-2xl font-bold` or `text-xl font-bold` - Subtitle: `text-xl font-medium` or `text-lg` - Body: `text-sm` or `text-base` - Caption: `text-xs` - Mono/Code: `font-mono text-xs` ### Font Weights - Bold: `font-bold` (titles, emphasis) - Semibold: `font-semibold` (subtitles, labels) - Medium: `font-medium` (secondary text) --- ## Spacing ### Layout - Max Width: `max-w-6xl` (main container), `max-w-4xl` (content), `max-w-3xl` (cards), `max-w-5xl` (hero image) - Padding: `px-6` (horizontal), `py-20` or `py-24` (section vertical) - Gap: `gap-8` (cards), `gap-6` (nav items), `gap-4` (buttons), `gap-2` (tags) ### Component Spacing - Section margin bottom: `mb-16` - Card padding: `p-6` - Button padding: `px-8 py-3` (large), `px-4 py-2` (medium), `px-3 py-1` (small) --- ## Components ### Buttons **Primary Button** ```jsx className="bg-blue-600 hover:bg-blue-700 text-white px-8 py-3 rounded-lg font-semibold transition" ``` **Secondary/Outline Button** ```jsx className="border-2 border-gray-300 dark:border-gray-600 text-gray-900 dark:text-white hover:bg-gray-100 dark:hover:bg-gray-800 px-4 py-2 rounded-lg font-semibold transition" ``` **Language Toggle** ```jsx className="px-3 py-1 text-sm font-semibold rounded border border-gray-300 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-800" ``` **Icon Button** ```jsx className="p-2 hover:bg-gray-100 dark:hover:bg-gray-800 rounded" ``` ### Cards **Standard Card** ```jsx className="bg-white dark:bg-gray-900 rounded-lg border border-gray-200 dark:border-gray-800 p-6 hover:shadow-lg transition-shadow" ``` **Project Showcase Card** ```jsx className="bg-white dark:bg-gray-900 rounded-lg border border-gray-200 dark:border-gray-800 overflow-hidden hover:shadow-lg transition-shadow" ``` ### Tags/Pills **Skill Tag** ```jsx className="text-xs px-3 py-1 rounded-full bg-gray-100 dark:bg-gray-800 text-gray-700 dark:text-gray-300" ``` **Status Badge** ```jsx // Live className="px-3 py-1 rounded-full text-xs font-semibold bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200" // Building className="px-3 py-1 rounded-full text-xs font-semibold bg-blue-100 dark:bg-blue-900 text-blue-800 dark:text-blue-200" ``` ### Dropdowns **Dropdown Container** ```jsx className="absolute right-0 mt-2 w-64 bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-800 rounded-lg shadow-lg p-4 space-y-3" ``` ### Modals **Modal Overlay** ```jsx className="fixed inset-0 bg-black/50 z-50 flex items-center justify-center p-4" ``` **Modal Content** ```jsx className="bg-white dark:bg-gray-900 rounded-lg shadow-2xl max-w-2xl w-full max-h-96 overflow-y-auto" ``` **Modal Header (Gradient)** ```jsx className="sticky top-0 bg-gradient-to-r from-blue-600 to-purple-600 px-6 py-6 flex justify-between items-center" ``` --- ## Animations (Framer Motion) ### Fade In Up ```jsx initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} transition={{ duration: 0.8, delay: 0.2 }} ``` ### Scale In ```jsx initial={{ scale: 0, opacity: 0 }} animate={{ scale: 1, opacity: 1 }} transition={{ duration: 0.8, delay: 0.2 }} ``` ### Stagger Children ```jsx variants={{ hidden: { opacity: 0 }, visible: { opacity: 1, transition: { staggerChildren: 0.15 }, }, }} ``` ### Role Text Rotation ```jsx initial={{ opacity: 0, y: 20, scale: 0.95 }} animate={{ opacity: 1, y: 0, scale: 1 }} exit={{ opacity: 0, y: -20, scale: 0.95 }} transition={{ duration: 0.6, ease: 'easeInOut' }} ``` ### Background Pulse ```jsx animate={{ scale: [1, 1.15, 1], opacity: [0.25, 0.4, 0.25], }} transition={{ duration: 6, repeat: Infinity, ease: 'easeInOut', }} ``` --- ## Gradients ### Hero Background ```jsx className="bg-gradient-to-br from-blue-50 to-purple-50 dark:from-gray-950 dark:to-gray-900" ``` ### Timeline Line ```jsx className="bg-gradient-to-b from-blue-500 via-purple-500 to-green-500" ``` ### Stat Highlight ```jsx className="bg-gradient-to-r from-blue-50 to-purple-50 dark:from-gray-800 dark:to-gray-800" ``` ### Modal Header ```jsx className="bg-gradient-to-r from-blue-600 to-purple-600" ``` --- ## Z-Index Layers - `z-0`: Background images - `z-10`: Content overlays (avatar, text) - `z-20`: Avatar + rotating text group - `z-40`: Terminal button - `z-50`: Header, Modals --- ## Responsive Breakpoints - Mobile: Default (no prefix) - Tablet/Desktop: `md:` (768px+) - Large Desktop: `lg:` (1024px+) ### Common Patterns ```jsx // Hide on mobile, show on desktop className="hidden md:flex" // Show on mobile, hide on desktop className="md:hidden" // Responsive grid className="grid grid-cols-1 md:grid-cols-2 gap-8" // Responsive text className="text-4xl md:text-5xl" // Responsive padding className="px-4 md:px-6" ``` --- ## Icons (Lucide React) ### Sizes - Navigation: `size={20}` - Buttons: `size={16}` - Cards: `size={24}` - Hero: `size={32}` - Close: `size={24}` ### Common Icons - `Menu`, `X` - Mobile nav - `Moon`, `Sun` - Theme toggle - `ExternalLink` - External links - `Network`, `Shield`, `Code`, `Sparkles`, `Zap`, `Cpu` - Role icons - `GitBranch`, `Database`, `MessageSquare`, `Layers`, `BarChart3` - Feature icons --- ## Internationalization (i18n) ### Structure ``` lib/ translations.json # All translations LanguageContext.tsx # React context provider ``` ### Usage ```jsx import { useLanguage } from '@/lib/LanguageContext' const { lang, setLang, t } = useLanguage() // Access translations