/* CSS Variables */ :root { /* Pink palette */ --pink-50: #FFF0F5; --pink-100: #FFE0EB; --pink-200: #FFB8D9; --pink-300: #FF8AC8; --pink-400: #F45D9E; --pink-500: #D23B80; /* Sage palette */ --sage-200: #D4E6D5; --sage-300: #B5D4B7; --sage-400: #8AB68C; --sage-500: #6A9A6C; /* Neutral palette */ --cream-50: #FFFEF5; --cream-100: #FFF9F0; /* Semantic colors */ --text: #4a4a4a; --bg-primary: var(--pink-50); --bg-secondary: white; --accent-primary: var(--pink-400); --accent-secondary: var(--sage-400); /* Spacing */ --space-xs: 0.25rem; --space-sm: 0.5rem; --space-md: 1rem; --space-lg: 1.5rem; --space-xl: 2rem; --space-xxl: 3rem; /* Container */ --container-max: 1200px; /* Animation */ --transition: 0.2s ease; } /* Reset */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } /* Base styles */ body { font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', sans-serif; line-height: 1.6; color: var(--text); background-color: var(--bg-primary); min-height: 100vh; display: flex; flex-direction: column; -webkit-font-smoothing: antialiased; } .container { width: 100%; max-width: var(--container-max); margin: 0 auto; padding: 0 var(--space-md); } /* Accessibility */ .skip-link { position: absolute; top: -40px; left: 0; padding: var(--space-sm) var(--space-md); background-color: var(--accent-primary); color: white; z-index: 100; transition: top var(--transition); } .skip-link:focus { top: 0; } .visually-hidden { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } /* Typography */ h1, h2, h3 { line-height: 1.3; margin-bottom: var(--space-md); } h1 { font-size: clamp(2.25rem, 5vw, 3rem); color: var(--accent-primary); } h2 { font-size: clamp(1.75rem, 4vw, 2rem); color: var(--accent-secondary); } h3 { font-size: clamp(1.25rem, 3vw, 1.5rem); color: var(--accent-primary); } p { margin-bottom: var(--space-md); } a { color: var(--accent-primary); text-decoration: none; transition: color var(--transition); } a:hover, a:focus { color: var(--accent-secondary); text-decoration: underline; } /* Focus styles */ :focus { outline: 3px solid var(--pink-300); outline-offset: 3px; } /* Header & Navigation */ header { background-color: var(--bg-primary); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); position: sticky; top: 0; z-index: 10; } nav { padding: var(--space-md) 0; } nav .container { display: flex; align-items: center; justify-content: space-between; } .logo { font-weight: bold; font-size: 1.25rem; color: var(--accent-primary); } .logo:hover, .logo:focus { text-decoration: none; } .nav-links { display: flex; list-style: none; gap: var(--space-sm); align-items: center; } .nav-links a { display: inline-flex; align-items: center; padding: var(--space-sm) var(--space-md); border-radius: 9999px; background-color: var(--sage-200); color: var(--text); transition: all var(--transition); } .nav-links a:hover, .nav-links a:focus { background-color: var(--pink-200); text-decoration: none; transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); } .theme-toggle { background-color: var(--pink-300); border: none; color: white; width: 36px; height: 36px; border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: all var(--transition); } .theme-toggle:hover, .theme-toggle:focus { background-color: var(--pink-200); transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); } .menu-toggle { display: none; background-color: var(--pink-300); border: none; width: 36px; height: 36px; border-radius: 50%; position: relative; cursor: pointer; color: white; align-items: center; justify-content: center; transition: all var(--transition); } .menu-toggle:hover, .menu-toggle:focus { background-color: var(--pink-200); transform: translateY(-2px); box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); } /* Main content */ main { flex: 1; padding: var(--space-xxl) 0; } .intro { background-color: var(--bg-secondary); border-radius: 0.75rem; padding: var(--space-xl); margin-bottom: var(--space-xxl); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); } .projects { margin-bottom: var(--space-xxl); } .projects h2 { position: relative; margin-bottom: var(--space-xl); display: flex; align-items: center; } .projects h2::after { content: ''; flex: 1; height: 1px; margin-left: var(--space-md); background-color: var(--sage-200); } .project-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: var(--space-lg); } .project { background-color: var(--bg-secondary); border-radius: 0.5rem; padding: var(--space-md); box-shadow: 0 2px 5px rgba(0, 0, 0, 0.05); transition: transform var(--transition), box-shadow var(--transition); } .project:hover, .project:focus-within { transform: translateY(-4px); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.08); } .project h3 { margin-bottom: var(--space-sm); } .project p { margin-bottom: var(--space-sm); } .project a { display: inline-flex; align-items: center; font-size: 0.875rem; transition: all var(--transition); } .project a:hover, .project a:focus { transform: translateY(-2px); } .icon-small { width: 14px; height: 14px; margin-left: var(--space-xs); } /* Footer */ footer { background-color: var(--pink-100); padding: var(--space-xl); text-align: center; } .social-links { display: flex; justify-content: center; flex-wrap: wrap; gap: var(--space-xs); list-style: none; margin-bottom: var(--space-md); } .social-links li:not(:last-child)::after { content: "•"; margin: 0 var(--space-xs); } /* Dark mode */ .dark-mode { --pink-50: #3A2A35; --pink-100: #59354B; --pink-200: #8E5773; --pink-300: #B47A93; --pink-400: #D7A1B8; --pink-500: #E9C3D3; --sage-200: #3D5D3E; --sage-300: #7BA97D; --sage-400: #5D8F5F; --text: #f7fafc; --bg-primary: #1a202c; --bg-secondary: #2d3748; } .dark-mode .projects h2::after { background: linear-gradient(to right, var(--pink-400), transparent); } /* Responsive design */ @media (max-width: 768px) { .menu-toggle { display: flex; } .nav-links { position: fixed; top: 60px; left: 0; right: 0; background-color: var(--bg-primary); flex-direction: column; padding: var(--space-md); box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); border-top: 1px solid var(--pink-200); transform: translateY(-100%); opacity: 0; pointer-events: none; transition: transform var(--transition), opacity var(--transition); z-index: 100; } .nav-links.menu-open { transform: translateY(0); opacity: 1; pointer-events: auto; } .nav-links li { width: 100%; } .nav-links a { display: flex; width: 100%; padding: var(--space-md); margin-bottom: var(--space-xs); transform: none; } .nav-links a:hover, .nav-links a:focus { transform: none; box-shadow: none; background-color: var(--pink-200); } .intro { padding: var(--space-lg); } } @media (min-width: 769px) { .project-grid { grid-template-columns: repeat(2, 1fr); } } @media (min-width: 1024px) { .project-grid { grid-template-columns: repeat(3, 1fr); } }