/* ============================================
CSS Variables & Theme Configuration
============================================ */
:root {
/* Color Palette - No Purple */
--primary: #0ea5e9;
--primary-dark: #0284c7;
--primary-light: #38bdf8;
--accent: #14b8a6;
--accent-dark: #0d9488;
--accent-light: #2dd4bf;
/* Neutrals */
--white: #ffffff;
--black: #000000;
--gray-50: #f9fafb;
--gray-100: #f3f4f6;
--gray-200: #e5e7eb;
--gray-300: #d1d5db;
--gray-400: #9ca3af;
--gray-500: #6b7280;
--gray-600: #4b5563;
--gray-700: #374151;
--gray-800: #1f2937;
--gray-900: #111827;
--charcoal: #0f172a;
/* Light Theme */
--bg-primary: var(--white);
--bg-secondary: var(--gray-50);
--bg-tertiary: var(--gray-100);
--text-primary: var(--gray-900);
--text-secondary: var(--gray-600);
--text-tertiary: var(--gray-500);
--border-color: var(--gray-200);
--card-bg: var(--white);
--card-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
--card-shadow-hover: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
/* Typography */
--font-primary: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
--font-mono: 'JetBrains Mono', 'Fira Code', monospace;
/* Spacing */
--section-padding: 6rem;
--container-max: 1200px;
--container-padding: 1.5rem;
/* Transitions */
--transition-fast: 150ms ease;
--transition-base: 300ms ease;
--transition-slow: 500ms ease;
/* Border Radius */
--radius-sm: 0.375rem;
--radius-md: 0.5rem;
--radius-lg: 0.75rem;
--radius-xl: 1rem;
--radius-2xl: 1.5rem;
--radius-full: 9999px;
}
/* Dark Theme */
[data-theme="dark"] {
--bg-primary: var(--charcoal);
--bg-secondary: var(--gray-900);
--bg-tertiary: var(--gray-800);
--text-primary: var(--gray-100);
--text-secondary: var(--gray-400);
--text-tertiary: var(--gray-500);
--border-color: var(--gray-700);
--card-bg: var(--gray-800);
--card-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.3), 0 2px 4px -2px rgba(0, 0, 0, 0.3);
--card-shadow-hover: 0 20px 25px -5px rgba(0, 0, 0, 0.4), 0 8px 10px -6px rgba(0, 0, 0, 0.4);
}
/* ============================================
Base Styles & Reset
============================================ */
*,
*::before,
*::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
scroll-padding-top: 80px;
width: 100%;
overflow-x: hidden;
}
body {
font-family: var(--font-primary);
font-size: 16px;
line-height: 1.6;
color: var(--text-primary);
background-color: var(--bg-primary);
overflow-x: hidden;
transition: background-color var(--transition-base), color var(--transition-base);
width: 100%;
min-width: 100%;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
}
/* ============================================
Scroll Progress Indicator
============================================ */
.scroll-progress {
position: fixed;
top: 0;
left: 0;
width: 0%;
height: 3px;
background: linear-gradient(90deg, var(--primary), var(--accent));
z-index: 9999;
transition: width 0.1s ease-out;
box-shadow: 0 0 10px rgba(14, 165, 233, 0.5);
}
/* ============================================
Back to Top Button
============================================ */
.back-to-top {
position: fixed;
bottom: 2rem;
right: 2rem;
width: 50px;
height: 50px;
border-radius: var(--radius-lg);
background: linear-gradient(135deg, var(--primary), var(--accent));
color: var(--white);
border: none;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.25rem;
box-shadow: 0 4px 15px rgba(14, 165, 233, 0.4);
opacity: 0;
visibility: hidden;
transform: translateY(20px);
transition: opacity var(--transition-base), visibility var(--transition-base), transform var(--transition-base), box-shadow var(--transition-base);
z-index: 1000;
}
.back-to-top.visible {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.back-to-top:hover {
transform: translateY(-4px);
box-shadow: 0 8px 25px rgba(14, 165, 233, 0.5);
}
.back-to-top:active {
transform: translateY(-2px);
}
@media (max-width: 768px) {
.back-to-top {
bottom: 1.5rem;
right: 1.5rem;
width: 44px;
height: 44px;
font-size: 1rem;
}
}
a {
text-decoration: none;
color: inherit;
transition: color var(--transition-fast);
}
img {
max-width: 100%;
height: auto;
display: block;
}
ul,
ol {
list-style: none;
}
button {
font-family: inherit;
cursor: pointer;
border: none;
background: none;
}
input,
textarea {
font-family: inherit;
font-size: inherit;
}
/* ============================================
Particles Canvas Background
============================================ */
#particles-canvas {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: -1;
pointer-events: none;
opacity: 0.6;
transform: translate3d(0, 0, 0);
will-change: contents;
}
[data-theme="dark"] #particles-canvas {
opacity: 0.4;
}
/* ============================================
Container & Layout
============================================ */
.container {
width: 100%;
max-width: var(--container-max);
margin: 0 auto;
padding: 0 var(--container-padding);
}
.section {
padding: var(--section-padding) 0;
position: relative;
width: 100%;
content-visibility: auto;
contain-intrinsic-size: auto 500px;
}
.section-header {
text-align: center;
margin-bottom: 4rem;
}
.section-tag {
display: inline-block;
font-size: 0.875rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.1em;
color: var(--primary);
background: linear-gradient(135deg, rgba(14, 165, 233, 0.1), rgba(20, 184, 166, 0.1));
padding: 0.5rem 1rem;
border-radius: var(--radius-full);
margin-bottom: 1rem;
}
.section-title {
font-size: clamp(2rem, 5vw, 3rem);
font-weight: 700;
color: var(--text-primary);
line-height: 1.2;
}
/* ============================================
Navigation
============================================ */
.navbar {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
padding: 1rem 0;
transition: background var(--transition-base), box-shadow var(--transition-base), padding var(--transition-base);
background: transparent;
}
.navbar.scrolled {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
[data-theme="dark"] .navbar.scrolled {
background: rgba(15, 23, 42, 0.95);
}
.nav-container {
max-width: var(--container-max);
margin: 0 auto;
padding: 0 var(--container-padding);
display: flex;
align-items: center;
justify-content: space-between;
}
.nav-logo {
display: flex;
align-items: center;
gap: 0.5rem;
}
.logo-text {
font-size: 1.5rem;
font-weight: 800;
background: linear-gradient(135deg, var(--primary), var(--accent));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.nav-menu {
display: flex;
align-items: center;
gap: 2rem;
}
.nav-link {
font-size: 0.9375rem;
font-weight: 500;
color: var(--text-secondary);
position: relative;
padding: 0.25rem 0;
}
.nav-link::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 0;
height: 2px;
background: linear-gradient(135deg, var(--primary), var(--accent));
transition: width var(--transition-base);
}
.nav-link:hover {
color: var(--text-primary);
}
.nav-link:hover::after {
width: 100%;
}
/* Navigation Dropdowns */
.nav-dropdown {
position: relative;
}
.dropdown-toggle {
display: flex;
align-items: center;
gap: 0.35rem;
background: none;
border: none;
cursor: pointer;
font-family: inherit;
}
.dropdown-toggle i {
font-size: 0.625rem;
transition: transform var(--transition-fast);
}
.nav-dropdown:hover .dropdown-toggle i {
transform: rotate(180deg);
}
.dropdown-menu {
position: absolute;
top: 100%;
left: 50%;
transform: translateX(-50%) translateY(10px);
min-width: 160px;
background: var(--card-bg);
border: 1px solid var(--border-color);
border-radius: var(--radius-lg);
padding: 0.5rem;
opacity: 0;
visibility: hidden;
transition: opacity var(--transition-fast), visibility var(--transition-fast), transform var(--transition-fast);
box-shadow: var(--card-shadow);
z-index: 100;
}
.nav-dropdown:hover .dropdown-menu {
opacity: 1;
visibility: visible;
transform: translateX(-50%) translateY(0);
}
.dropdown-menu li {
list-style: none;
}
.dropdown-menu a {
display: block;
padding: 0.6rem 1rem;
font-size: 0.875rem;
font-weight: 500;
color: var(--text-secondary);
border-radius: var(--radius-md);
transition: background var(--transition-fast), color var(--transition-fast);
}
.dropdown-menu a:hover {
background: var(--bg-tertiary);
color: var(--primary);
}
.nav-actions {
display: flex;
align-items: center;
gap: 0.75rem;
}
.theme-toggle {
width: 44px;
height: 44px;
border-radius: var(--radius-lg);
display: flex;
align-items: center;
justify-content: center;
color: var(--text-secondary);
background: var(--bg-tertiary);
transition: all var(--transition-fast);
-webkit-tap-highlight-color: transparent;
touch-action: manipulation;
}
.theme-toggle:hover {
color: var(--primary);
background: var(--bg-secondary);
}
.nav-toggle {
display: none;
flex-direction: column;
gap: 5px;
padding: 0.75rem;
width: 44px;
height: 44px;
align-items: center;
justify-content: center;
-webkit-tap-highlight-color: transparent;
touch-action: manipulation;
}
.nav-toggle span {
width: 24px;
height: 2px;
background: var(--text-primary);
border-radius: var(--radius-full);
transition: all var(--transition-fast);
}
/* ============================================
Hero Section
============================================ */
.hero {
min-height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
padding: 6rem 0 4rem;
position: relative;
overflow: hidden;
width: 100%;
}
.hero-container {
width: 100%;
max-width: var(--container-max);
margin: 0 auto;
padding: 0 var(--container-padding);
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: center;
}
.hero-content {
z-index: 1;
}
.hero-badge {
display: inline-flex;
align-items: center;
gap: 0.5rem;
background: var(--bg-tertiary);
padding: 0.5rem 1rem;
border-radius: var(--radius-full);
font-size: 0.875rem;
color: var(--text-secondary);
margin-bottom: 1.5rem;
animation: fadeInUp 0.6s ease forwards;
}
.badge-dot {
width: 8px;
height: 8px;
background: var(--accent);
border-radius: 50%;
animation: pulse 2s ease infinite;
}
@keyframes pulse {
0%,
100% {
opacity: 1;
transform: scale(1);
}
50% {
opacity: 0.6;
transform: scale(1.2);
}
}
.hero-title {
font-size: clamp(2.5rem, 6vw, 4rem);
font-weight: 800;
line-height: 1.1;
margin-bottom: 1rem;
animation: fadeInUp 0.6s ease 0.1s forwards;
opacity: 0;
}
.gradient-text {
background: linear-gradient(135deg, var(--primary), var(--accent));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.hero-tagline {
font-size: 1.5rem;
font-weight: 500;
color: var(--text-secondary);
margin-bottom: 1.5rem;
animation: fadeInUp 0.6s ease 0.2s forwards;
opacity: 0;
}
.hero-description {
font-size: 1.125rem;
color: var(--text-secondary);
max-width: 540px;
margin-bottom: 2rem;
animation: fadeInUp 0.6s ease 0.3s forwards;
opacity: 0;
}
.hero-description strong {
color: var(--text-primary);
}
.hero-cta {
display: flex;
gap: 1rem;
flex-wrap: wrap;
margin-bottom: 3rem;
animation: fadeInUp 0.6s ease 0.4s forwards;
opacity: 0;
}
.hero-stats {
display: flex;
gap: 3rem;
animation: fadeInUp 0.6s ease 0.5s forwards;
opacity: 0;
}
.stat-item {
text-align: center;
}
.stat-number {
display: inline;
font-size: 2.5rem;
font-weight: 800;
color: var(--primary);
line-height: 1;
}
.stat-plus {
display: inline;
font-size: 2.5rem;
font-weight: 800;
color: var(--primary);
line-height: 1;
margin-left: 0.1rem;
}
.stat-label {
display: block;
font-size: 0.875rem;
color: var(--text-tertiary);
text-transform: uppercase;
letter-spacing: 0.05em;
margin-top: 0.25rem;
}
/* Hero Visual / Code Block */
.hero-visual {
display: flex;
justify-content: center;
align-items: center;
animation: fadeInRight 0.8s ease 0.3s forwards;
opacity: 0;
}
@keyframes fadeInRight {
from {
opacity: 0;
transform: translateX(30px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
.visual-card {
width: 100%;
max-width: 480px;
}
.code-block {
background: var(--gray-900);
border-radius: var(--radius-xl);
overflow: hidden;
box-shadow: var(--card-shadow-hover);
}
.code-header {
display: flex;
gap: 0.5rem;
padding: 1rem 1.25rem;
background: rgba(0, 0, 0, 0.3);
}
.dot {
width: 12px;
height: 12px;
border-radius: 50%;
}
.dot.red {
background: #ef4444;
}
.dot.yellow {
background: #eab308;
}
.dot.green {
background: #22c55e;
}
.code-block pre {
padding: 1.25rem;
overflow-x: auto;
font-size: 0.875rem;
line-height: 1.7;
}
.code-block code {
font-family: var(--font-mono);
color: var(--gray-300);
}
.code-block .keyword {
color: #38bdf8;
}
.code-block .class-name {
color: #2dd4bf;
}
.code-block .function {
color: #fbbf24;
}
.code-block .string {
color: #4ade80;
}
/* Scroll Indicator */
.scroll-indicator {
position: absolute;
bottom: 2rem;
left: 50%;
transform: translateX(-50%);
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
color: var(--text-tertiary);
font-size: 0.875rem;
animation: bounce 2s ease infinite;
}
@keyframes bounce {
0%,
100% {
transform: translateX(-50%) translateY(0);
}
50% {
transform: translateX(-50%) translateY(10px);
}
}
/* ============================================
Buttons
============================================ */
.btn {
display: inline-flex;
align-items: center;
justify-content: center;
gap: 0.5rem;
padding: 0.875rem 1.75rem;
font-size: 1rem;
font-weight: 600;
border-radius: var(--radius-lg);
transition: all var(--transition-fast);
min-height: 48px;
/* Touch-friendly minimum */
-webkit-tap-highlight-color: transparent;
touch-action: manipulation;
}
.btn-primary {
background: linear-gradient(135deg, var(--primary), var(--accent));
color: var(--white);
box-shadow: 0 4px 14px rgba(14, 165, 233, 0.35);
}
.btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 8px 25px rgba(14, 165, 233, 0.45);
}
.btn-secondary {
background: var(--bg-tertiary);
color: var(--text-primary);
border: 1px solid var(--border-color);
}
.btn-secondary:hover {
background: var(--bg-secondary);
border-color: var(--primary);
color: var(--primary);
}
.btn-full {
width: 100%;
}
/* ============================================
Animation Keyframes
============================================ */
@keyframes fadeInUp {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* ============================================
About Section
============================================ */
.about-content {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: start;
width: 100%;
}
.about-text p {
font-size: 1.125rem;
color: var(--text-secondary);
margin-bottom: 1.5rem;
line-height: 1.8;
}
.about-text strong {
color: var(--text-primary);
}
.about-highlights {
display: flex;
flex-direction: column;
gap: 1.5rem;
width: 100%;
}
.highlight-card {
background: var(--card-bg);
padding: 1.5rem;
border-radius: var(--radius-xl);
border: 1px solid var(--border-color);
display: flex;
align-items: flex-start;
gap: 1rem;
transition: transform var(--transition-base), box-shadow var(--transition-base), border-color var(--transition-base);
will-change: transform;
width: 100%;
}
.highlight-card:hover {
transform: translateY(-4px);
box-shadow: var(--card-shadow-hover);
border-color: var(--primary);
}
.highlight-icon {
width: 48px;
height: 48px;
border-radius: var(--radius-lg);
background: linear-gradient(135deg, rgba(14, 165, 233, 0.1), rgba(20, 184, 166, 0.1));
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.highlight-icon i {
font-size: 1.25rem;
color: var(--primary);
}
.highlight-card h4 {
font-size: 1.125rem;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 0.25rem;
}
.highlight-card p {
font-size: 0.9375rem;
color: var(--text-secondary);
}
/* ============================================
Skills Section
============================================ */
.skills-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
margin-bottom: 4rem;
}
.skill-category {
background: var(--card-bg);
padding: 1.75rem;
border-radius: var(--radius-xl);
border: 1px solid var(--border-color);
transition: transform var(--transition-base), box-shadow var(--transition-base);
will-change: transform;
}
.skill-category:hover {
transform: translateY(-4px);
box-shadow: var(--card-shadow-hover);
}
.category-header {
display: flex;
align-items: center;
gap: 0.75rem;
margin-bottom: 1.25rem;
}
.category-header i {
font-size: 1.25rem;
color: var(--primary);
}
.category-header h3 {
font-size: 1.125rem;
font-weight: 600;
color: var(--text-primary);
}
.skill-tags {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
}
.skill-tag {
background: linear-gradient(135deg, rgba(14, 165, 233, 0.1), rgba(20, 184, 166, 0.1));
color: var(--primary);
padding: 0.5rem 1rem;
border-radius: var(--radius-full);
font-size: 0.875rem;
font-weight: 500;
transition: background var(--transition-fast), color var(--transition-fast);
}
.skill-tag:hover {
background: var(--primary);
color: var(--white);
}
/* Soft Skills */
.soft-skills-section {
text-align: center;
}
.subsection-title {
font-size: 1.5rem;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 2rem;
}
.soft-skills-grid {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 1rem;
}
.soft-skill-card {
background: var(--card-bg);
padding: 1.25rem 2rem;
border-radius: var(--radius-xl);
border: 1px solid var(--border-color);
display: flex;
align-items: center;
gap: 0.75rem;
transition: transform var(--transition-base), box-shadow var(--transition-base), border-color var(--transition-base);
will-change: transform;
}
.soft-skill-card:hover {
transform: translateY(-4px);
box-shadow: var(--card-shadow-hover);
border-color: var(--accent);
}
.soft-skill-card i {
font-size: 1.25rem;
color: var(--accent);
}
.soft-skill-card span {
font-size: 1rem;
font-weight: 500;
color: var(--text-primary);
}
/* ============================================
Projects Section
============================================ */
.projects {
background: var(--bg-secondary);
}
.projects .container {
max-width: 1200px;
}
/* Carousel Container */
.carousel-container {
position: relative;
display: flex;
align-items: center;
gap: 0.6rem;
}
.carousel-track-container {
overflow: hidden;
flex: 1;
position: relative;
min-height: 450px;
}
.carousel-track {
display: flex !important;
gap: 2rem;
transition: transform 0.5s cubic-bezier(0.25, 0.1, 0.25, 1);
will-change: transform;
transform: translate3d(0, 0, 0);
backface-visibility: hidden;
align-items: stretch;
}
.carousel-track.projects-grid {
display: flex !important;
grid-template-columns: none;
}
.carousel-track .project-card {
flex: 0 0 320px;
min-width: 320px;
max-width: none;
visibility: visible;
opacity: 1;
}
.carousel-btn {
width: 48px;
height: 48px;
border-radius: 50%;
background: var(--card-bg);
border: 1px solid var(--border-color);
color: var(--text-secondary);
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
transition: all var(--transition-base);
flex-shrink: 0;
z-index: 10;
box-shadow: var(--card-shadow);
}
.carousel-btn:hover {
background: var(--primary);
border-color: var(--primary);
color: var(--white);
transform: scale(1.05);
box-shadow: 0 4px 15px rgba(14, 165, 233, 0.3);
}
.carousel-btn:active {
transform: scale(0.95);
}
.carousel-btn i {
font-size: 1rem;
}
.mini-projects-wrapper {
margin-top: 3rem;
padding-top: 2rem;
border-top: 1px solid var(--border-color);
}
.mini-projects-title {
font-size: clamp(1.25rem, 2.8vw, 1.6rem);
font-weight: 700;
color: var(--text-primary);
margin-bottom: 1.25rem;
text-align: center;
}
.mini-carousel-container {
position: relative;
display: flex;
align-items: center;
gap: 0.75rem;
}
.mini-carousel-track-container {
overflow: hidden;
flex: 1;
}
.mini-projects-track {
display: flex;
gap: 1rem;
align-items: stretch;
transition: transform 0.5s cubic-bezier(0.25, 0.1, 0.25, 1);
will-change: transform;
}
.mini-project-item {
flex: 0 0 calc(25% - 0.75rem);
min-width: 220px;
background: var(--card-bg);
border: 1px solid var(--border-color);
border-radius: var(--radius-lg);
padding: 1rem 1.15rem;
display: inline-flex;
align-items: center;
gap: 0.75rem;
transition: transform var(--transition-base), box-shadow var(--transition-base), border-color var(--transition-base);
}
.mini-project-item:hover {
transform: translateY(-3px);
box-shadow: var(--card-shadow);
border-color: var(--primary);
}
.mini-project-item:focus-visible {
transform: translateY(-3px);
box-shadow: var(--card-shadow);
border-color: var(--primary);
outline: 2px solid var(--primary-light);
outline-offset: 2px;
}
.mini-project-icon {
width: 2.25rem;
height: 2.25rem;
border-radius: var(--radius-md);
background: linear-gradient(135deg, var(--primary), var(--accent));
color: var(--white);
display: inline-flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.mini-project-name {
color: var(--text-primary);
font-size: 0.95rem;
font-weight: 600;
line-height: 1.3;
}
.mini-carousel-btn-prev,
.mini-carousel-btn-next {
width: 42px;
height: 42px;
}
@media (max-width: 1024px) {
.carousel-track .project-card {
flex: 0 0 calc(50% - 1rem);
}
.mini-project-item {
flex: 0 0 calc(33.333% - 0.7rem);
}
.job-sim-card {
flex: 0 0 calc(50% - 0.75rem);
}
}
@media (max-width: 768px) {
.carousel-container {
flex-direction: column;
gap: 1.5rem;
}
.carousel-track .project-card {
flex: 0 0 100%;
min-width: auto;
}
.carousel-btn {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 40px;
height: 40px;
z-index: 20;
opacity: 0.9;
}
.carousel-btn:hover {
transform: translateY(-50%) scale(1.05);
}
.carousel-btn-prev {
left: -0.5rem;
}
.carousel-btn-next {
right: -0.5rem;
}
.carousel-track-container {
width: 100%;
order: 1;
}
.mini-carousel-container {
flex-direction: column;
gap: 1rem;
}
.mini-project-item {
flex: 0 0 100%;
min-width: auto;
}
.mini-carousel-btn-prev,
.mini-carousel-btn-next {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 36px;
height: 36px;
z-index: 20;
opacity: 0.9;
}
.mini-carousel-btn-prev {
left: -0.45rem;
}
.mini-carousel-btn-next {
right: -0.45rem;
}
.mini-carousel-track-container {
width: 100%;
}
.job-sim-carousel {
flex-direction: column;
gap: 1.5rem;
}
.job-sim-track-container {
width: 100%;
order: 1;
}
.job-sim-card {
flex: 0 0 100%;
}
.job-sim-carousel .carousel-btn {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 40px;
height: 40px;
z-index: 20;
opacity: 0.9;
}
.job-sim-carousel .carousel-btn:hover {
transform: translateY(-50%) scale(1.05);
}
.job-sim-carousel .carousel-btn-prev {
left: -0.5rem;
}
.job-sim-carousel .carousel-btn-next {
right: -0.5rem;
}
}
.projects-grid:not(.carousel-track) {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
gap: 2rem;
}
.project-card {
background: var(--card-bg);
padding: 2rem;
border-radius: var(--radius-xl);
border: 1px solid var(--border-color);
transition: transform var(--transition-base), box-shadow var(--transition-base);
will-change: transform;
display: flex;
flex-direction: column;
}
.project-card:hover {
transform: translateY(-8px);
box-shadow: var(--card-shadow-hover);
}
.project-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 1.5rem;
}
.project-icon {
width: 56px;
height: 56px;
border-radius: var(--radius-lg);
background: linear-gradient(135deg, var(--primary), var(--accent));
display: flex;
align-items: center;
justify-content: center;
}
.project-icon i {
font-size: 1.5rem;
color: var(--white);
}
.project-links {
display: flex;
gap: 0.5rem;
}
.project-link {
width: 40px;
height: 40px;
border-radius: var(--radius-md);
background: var(--bg-tertiary);
display: flex;
align-items: center;
justify-content: center;
color: var(--text-secondary);
transition: all var(--transition-fast);
}
.project-link:hover {
background: var(--primary);
color: var(--white);
}
.project-title {
font-size: 1.25rem;
font-weight: 700;
color: var(--text-primary);
margin-bottom: 0.75rem;
}
.project-description {
color: var(--text-secondary);
margin-bottom: 1.25rem;
line-height: 1.7;
}
.project-features {
margin-bottom: 1.5rem;
padding-left: 1.25rem;
flex-grow: 1;
}
.project-features li {
position: relative;
color: var(--text-secondary);
font-size: 0.9375rem;
margin-bottom: 0.5rem;
line-height: 1.6;
}
.project-features li::before {
content: '';
position: absolute;
left: -1.25rem;
top: 0.5rem;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--accent);
}
.project-tags {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin-top: auto;
}
.project-tags span {
font-size: 0.75rem;
font-weight: 500;
color: var(--text-tertiary);
background: var(--bg-tertiary);
padding: 0.35rem 0.75rem;
border-radius: var(--radius-full);
}
/* ============================================
Certifications Section - Compact Grid Timeline
============================================ */
.cert-timeline-wrapper {
position: relative;
padding-top: 2rem;
}
.cert-timeline-line {
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
width: 3px;
height: 2rem;
background: linear-gradient(180deg, var(--primary), var(--accent));
border-radius: var(--radius-full);
}
.cert-timeline-line::before {
content: '';
position: absolute;
top: -8px;
left: 50%;
transform: translateX(-50%);
width: 12px;
height: 12px;
background: var(--primary);
border-radius: 50%;
box-shadow: 0 0 0 4px var(--bg-primary), 0 0 0 6px var(--primary);
}
.cert-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.25rem;
position: relative;
}
/* Connecting lines between rows */
.cert-grid::before {
content: '';
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
width: 2px;
height: 50%;
background: linear-gradient(180deg, var(--primary) 0%, var(--accent) 50%, var(--primary) 100%);
opacity: 0.3;
z-index: 0;
}
.cert-card {
display: flex;
align-items: center;
gap: 1rem;
background: var(--card-bg);
padding: 1.25rem;
border-radius: var(--radius-xl);
border: 1px solid var(--border-color);
text-decoration: none;
transition: all var(--transition-base);
position: relative;
z-index: 1;
}
.cert-card:hover {
transform: translateY(-4px);
box-shadow: var(--card-shadow-hover);
border-color: var(--primary);
}
/* Timeline marker dot on each card */
.cert-marker {
position: absolute;
top: -8px;
left: 50%;
transform: translateX(-50%);
width: 10px;
height: 10px;
background: var(--accent);
border-radius: 50%;
border: 2px solid var(--bg-primary);
box-shadow: 0 0 0 2px var(--accent);
z-index: 2;
margin-left: 0;
}
.cert-card:hover .cert-marker {
background: var(--primary);
box-shadow: 0 0 0 2px var(--primary);
}
.cert-icon {
width: 48px;
height: 48px;
border-radius: var(--radius-lg);
background: linear-gradient(135deg, var(--primary), var(--accent));
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.cert-icon i {
font-size: 1.25rem;
color: var(--white);
}
.cert-info {
flex: 1;
min-width: 0;
}
.cert-date {
display: inline-block;
font-size: 0.75rem;
font-weight: 600;
color: var(--primary);
background: linear-gradient(135deg, rgba(14, 165, 233, 0.1), rgba(20, 184, 166, 0.1));
padding: 0.25rem 0.5rem;
border-radius: var(--radius-full);
margin-bottom: 0.375rem;
}
.cert-info h3 {
font-size: 0.9375rem;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 0.125rem;
line-height: 1.3;
}
.cert-info p {
font-size: 0.8125rem;
color: var(--text-secondary);
margin: 0;
}
.cert-link {
position: absolute;
top: 1rem;
right: 1rem;
color: var(--text-tertiary);
font-size: 0.875rem;
opacity: 0;
transition: all var(--transition-fast);
}
.cert-card:hover .cert-link {
opacity: 1;
color: var(--primary);
}
/* Responsive grid */
@media (max-width: 1024px) {
.cert-grid {
grid-template-columns: repeat(2, 1fr);
}
.cert-grid::before {
display: none;
}
}
@media (max-width: 640px) {
.cert-grid {
grid-template-columns: 1fr;
}
.cert-card {
padding: 1rem;
}
.cert-icon {
width: 40px;
height: 40px;
}
.cert-icon i {
font-size: 1rem;
}
}
/* Legacy Timeline Styles (kept for reference) */
.timeline {
max-width: 700px;
margin: 0 auto;
position: relative;
}
.timeline::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 2px;
background: linear-gradient(180deg, var(--primary), var(--accent));
}
/* ============================================
Achievements Section
============================================ */
.achievements-carousel-container {
position: relative;
display: flex;
align-items: center;
gap: 1rem;
margin-top: 1rem;
}
.achievements-carousel {
overflow: hidden;
flex: 1;
border-radius: var(--radius-xl);
}
.achievements-track {
display: flex;
transition: transform 0.5s cubic-bezier(0.25, 0.1, 0.25, 1);
gap: 1.5rem;
will-change: transform;
transform: translate3d(0, 0, 0);
backface-visibility: hidden;
}
.carousel-btn {
width: 50px;
height: 50px;
min-width: 50px;
border-radius: var(--radius-full);
background: var(--card-bg);
border: 2px solid var(--border-color);
color: var(--text-primary);
display: flex;
align-items: center;
justify-content: center;
font-size: 1.1rem;
cursor: pointer;
transition: all var(--transition-base);
box-shadow: var(--card-shadow);
z-index: 10;
}
.carousel-btn:hover {
background: linear-gradient(135deg, var(--primary), var(--accent));
color: var(--white);
border-color: transparent;
transform: scale(1.1);
box-shadow: 0 4px 20px rgba(14, 165, 233, 0.4);
}
.carousel-btn:active {
transform: scale(0.95);
}
.achievements-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
gap: 2rem;
margin-top: 1rem;
}
.achievement-card {
background: var(--card-bg);
border-radius: var(--radius-xl);
padding: 2rem;
box-shadow: var(--card-shadow);
border: 1px solid var(--border-color);
transition: transform var(--transition-base), box-shadow var(--transition-base), border-color var(--transition-base);
will-change: transform;
display: flex;
gap: 1.5rem;
align-items: flex-start;
position: relative;
overflow: hidden;
min-width: 325px;
max-width: 150px;
flex-shrink: 0;
cursor: pointer;
max-height: 190px;
}
.achievement-card::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 4px;
height: 100%;
background: linear-gradient(180deg, var(--primary), var(--accent));
}
.achievement-card:hover {
transform: translateY(-5px);
box-shadow: var(--card-shadow-hover);
border-color: var(--primary);
}
.achievement-icon {
width: 60px;
height: 60px;
min-width: 60px;
border-radius: var(--radius-lg);
background: linear-gradient(135deg, var(--primary), var(--accent));
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5rem;
color: var(--white);
box-shadow: 0 4px 15px rgba(14, 165, 233, 0.3);
}
.achievement-content {
flex: 1;
}
.achievement-year {
display: inline-block;
font-size: 0.75rem;
font-weight: 600;
color: var(--primary);
background: rgba(14, 165, 233, 0.1);
padding: 0.25rem 0.75rem;
border-radius: var(--radius-full);
margin-bottom: 0.75rem;
}
.achievement-content h3 {
font-size: 1.15rem;
font-weight: 700;
color: var(--text-primary);
margin-bottom: 0.5rem;
line-height: 1.3;
}
.achievement-content p {
font-size: 0.9rem;
color: var(--text-secondary);
line-height: 1.6;
}
@media (max-width: 768px) {
.achievements-carousel-container {
flex-direction: column;
gap: 1rem;
padding: 0;
}
.carousel-btn {
position: absolute;
top: 50%;
transform: translateY(-50%);
width: 40px;
height: 40px;
min-width: 40px;
z-index: 20;
background: var(--primary);
color: var(--white);
border: none;
}
.carousel-btn-prev {
left: 0;
}
.carousel-btn-next {
right: 0;
}
.achievements-carousel {
padding: 0 50px;
width: 100%;
}
.achievement-card {
min-width: calc(100vw - 150px);
max-width: calc(100vw - 150px);
width: calc(100vw - 150px);
padding: 1.5rem;
}
}
@media (max-width: 480px) {
.achievements-grid {
grid-template-columns: 1fr;
}
.achievements-carousel-container {
position: relative;
}
.achievement-card {
min-width: calc(100vw - 120px);
max-width: calc(100vw - 120px);
width: calc(100vw - 120px);
flex-direction: column;
text-align: center;
padding: 1.25rem;
gap: 1rem;
}
.achievement-card::before {
width: 100%;
height: 4px;
left: 0;
top: 0;
}
.achievement-icon {
margin: 0 auto;
width: 50px;
height: 50px;
min-width: 50px;
font-size: 1.25rem;
}
.achievement-content h3 {
font-size: 1rem;
}
.achievement-content p {
text-align: center;
font-size: 0.85rem;
}
.carousel-btn {
width: 32px;
height: 32px;
min-width: 32px;
font-size: 0.85rem;
}
.carousel-btn-prev {
left: 0.25rem;
}
.carousel-btn-next {
right: 0.25rem;
}
.achievements-carousel {
padding: 0 40px;
}
}
/* Horizontal Alternating Timeline */
.timeline-horizontal {
position: relative;
max-width: 1100px;
margin: 0 auto;
padding: 2rem 0;
}
.timeline-horizontal .timeline-line {
position: absolute;
left: 50%;
top: 0;
bottom: 0;
width: 3px;
background: linear-gradient(180deg, var(--primary), var(--accent));
transform: translateX(-50%);
}
.timeline-horizontal .timeline-item {
position: relative;
width: 50%;
padding: 0 2.5rem 3rem;
box-sizing: border-box;
}
.timeline-horizontal .timeline-item:last-child {
padding-bottom: 0;
}
.timeline-horizontal .timeline-item.left {
left: 0;
padding-right: 3rem;
padding-left: 0;
}
.timeline-horizontal .timeline-item.right {
left: 50%;
padding-left: 3rem;
padding-right: 0;
}
.timeline-horizontal .timeline-marker {
position: absolute;
top: 0;
width: 16px;
height: 16px;
border-radius: 50%;
background: var(--primary);
border: 3px solid var(--bg-primary);
box-shadow: 0 0 0 3px var(--primary);
z-index: 2;
}
.timeline-horizontal .timeline-item.left .timeline-marker {
right: -8px;
}
.timeline-horizontal .timeline-item.right .timeline-marker {
left: -8px;
}
.timeline-horizontal .timeline-content {
background: var(--card-bg);
padding: 1.5rem;
border-radius: var(--radius-xl);
border: 1px solid var(--border-color);
transition: all var(--transition-base);
position: relative;
}
.timeline-horizontal .timeline-item.left .timeline-content {
text-align: right;
}
.timeline-horizontal .timeline-item.right .timeline-content {
text-align: left;
}
.timeline-horizontal .timeline-content:hover {
box-shadow: var(--card-shadow-hover);
border-color: var(--primary);
}
.timeline-horizontal .timeline-item.left .timeline-content:hover {
transform: translateX(-8px);
}
.timeline-horizontal .timeline-item.right .timeline-content:hover {
transform: translateX(8px);
}
/* Arrow connectors */
.timeline-horizontal .timeline-content::before {
content: '';
position: absolute;
top: 12px;
width: 0;
height: 0;
border: 8px solid transparent;
}
.timeline-horizontal .timeline-item.left .timeline-content::before {
right: -16px;
border-left-color: var(--border-color);
}
.timeline-horizontal .timeline-item.right .timeline-content::before {
left: -16px;
border-right-color: var(--border-color);
}
/* Responsive: Stack on mobile */
@media (max-width: 768px) {
.timeline-horizontal .timeline-line {
left: 20px;
}
.timeline-horizontal .timeline-item,
.timeline-horizontal .timeline-item.left,
.timeline-horizontal .timeline-item.right {
width: 100%;
left: 0;
padding-left: 50px;
padding-right: 0;
}
.timeline-horizontal .timeline-item.left .timeline-marker,
.timeline-horizontal .timeline-item.right .timeline-marker {
left: 12px;
right: auto;
}
.timeline-horizontal .timeline-item.left .timeline-content,
.timeline-horizontal .timeline-item.right .timeline-content {
text-align: left;
}
.timeline-horizontal .timeline-item.left .timeline-content::before,
.timeline-horizontal .timeline-item.right .timeline-content::before {
left: -16px;
right: auto;
border-left-color: transparent;
border-right-color: var(--border-color);
}
.timeline-horizontal .timeline-item.left .timeline-content:hover,
.timeline-horizontal .timeline-item.right .timeline-content:hover {
transform: translateX(8px);
}
}
.timeline-item {
position: relative;
padding-left: 2.5rem;
padding-bottom: 2.5rem;
}
.timeline-item:last-child {
padding-bottom: 0;
}
.timeline-marker {
position: absolute;
left: -6px;
top: 0;
width: 14px;
height: 14px;
border-radius: 50%;
background: var(--primary);
border: 3px solid var(--bg-primary);
box-shadow: 0 0 0 3px var(--primary);
}
.timeline-content {
background: var(--card-bg);
padding: 1.5rem;
border-radius: var(--radius-xl);
border: 1px solid var(--border-color);
transition: all var(--transition-base);
}
.timeline-content:hover {
transform: translateX(8px);
box-shadow: var(--card-shadow);
}
.timeline-date {
display: inline-block;
font-size: 0.8125rem;
font-weight: 600;
color: var(--primary);
background: linear-gradient(135deg, rgba(14, 165, 233, 0.1), rgba(20, 184, 166, 0.1));
padding: 0.35rem 0.75rem;
border-radius: var(--radius-full);
margin-bottom: 0.75rem;
}
.timeline-content h3 {
font-size: 1.125rem;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 0.25rem;
}
.timeline-content p {
color: var(--text-secondary);
font-size: 0.9375rem;
}
/* Centered Timeline */
.timeline-centered {
max-width: 600px;
margin: 0 auto;
}
.timeline-centered::before {
left: 50%;
transform: translateX(-50%);
}
.timeline-centered .timeline-item {
padding-left: 0;
padding-right: 0;
display: flex;
justify-content: center;
}
.timeline-centered .timeline-marker {
left: 50%;
transform: translateX(-50%);
z-index: 1;
}
.timeline-centered .timeline-content {
width: 100%;
max-width: 500px;
text-align: center;
margin-top: 1.5rem;
}
.timeline-centered .timeline-content:hover {
transform: translateY(-4px);
}
/* Timeline Link Styles */
.timeline-link {
display: block;
text-decoration: none;
cursor: pointer;
}
.timeline-link:hover {
border-color: var(--primary);
}
.view-cert {
display: inline-flex;
align-items: center;
gap: 0.5rem;
margin-top: 0.75rem;
font-size: 0.875rem;
font-weight: 500;
color: var(--primary);
transition: all var(--transition-fast);
}
.timeline-link:hover .view-cert {
color: var(--accent);
}
.view-cert i {
font-size: 0.75rem;
}
/* ============================================
Education Section
============================================ */
.education {
background: var(--bg-secondary);
}
.education-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
gap: 1.5rem;
}
.education-card {
background: var(--card-bg);
padding: 2rem;
border-radius: var(--radius-xl);
border: 1px solid var(--border-color);
display: flex;
gap: 1.5rem;
transition: transform var(--transition-base), box-shadow var(--transition-base);
will-change: transform;
}
.education-card:hover {
transform: translateY(-4px);
box-shadow: var(--card-shadow-hover);
}
.education-icon {
width: 56px;
height: 56px;
border-radius: var(--radius-lg);
background: linear-gradient(135deg, rgba(14, 165, 233, 0.1), rgba(20, 184, 166, 0.1));
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.education-icon i {
font-size: 1.5rem;
color: var(--primary);
}
.education-content h3 {
font-size: 1.125rem;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 0.25rem;
}
.institution {
color: var(--text-secondary);
margin-bottom: 0.75rem;
}
.education-meta {
display: flex;
gap: 1.5rem;
font-size: 0.875rem;
}
.grade,
.year {
display: flex;
align-items: center;
gap: 0.375rem;
color: var(--text-tertiary);
}
.grade i,
.year i {
color: var(--accent);
font-size: 0.75rem;
}
/* ============================================
Leadership Section
============================================ */
.leadership-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
gap: 1.5rem;
align-items: stretch;
}
.leadership-card {
background: var(--card-bg);
padding: 2rem;
border-radius: var(--radius-xl);
border: 1px solid var(--border-color);
transition: transform var(--transition-base), box-shadow var(--transition-base);
will-change: transform;
display: flex;
flex-direction: column;
justify-content: flex-start;
position: relative;
}
.leadership-card:hover {
transform: translateY(-4px);
box-shadow: var(--card-shadow-hover);
}
.leadership-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
margin-bottom: 1rem;
}
.leadership-icon {
width: 48px;
height: 48px;
border-radius: var(--radius-lg);
background: linear-gradient(135deg, var(--primary), var(--accent));
display: flex;
align-items: center;
justify-content: center;
}
.leadership-icon i {
font-size: 1.25rem;
color: var(--white);
}
.leadership-date {
font-size: 0.8125rem;
font-weight: 500;
color: var(--text-tertiary);
background: var(--bg-tertiary);
padding: 0.35rem 0.75rem;
border-radius: var(--radius-full);
}
.leadership-card h3 {
font-size: 1.25rem;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 0.25rem;
}
.organization {
color: var(--primary);
font-weight: 500;
margin-bottom: 0.75rem;
}
.leadership-card .description {
color: var(--text-secondary);
font-size: 0.9375rem;
line-height: 1.6;
}
.leadership-link-arrow {
position: absolute;
top: 1rem;
right: 1rem;
color: var(--text-tertiary);
font-size: 0.875rem;
opacity: 0;
transition: all var(--transition-fast);
pointer-events: none;
}
.leadership-card:hover .leadership-link-arrow {
opacity: 1;
color: var(--primary);
}
/* Job Simulation Card Styles */
.job-sim-card {
display: flex;
flex-direction: column;
align-items: stretch;
}
.job-sim-carousel {
position: relative;
display: flex;
align-items: center;
gap: 0.6rem;
}
.job-sim-track-container {
overflow: hidden;
flex: 1;
}
.job-sim-track {
display: flex;
gap: 1.5rem;
align-items: stretch;
transition: transform 0.5s cubic-bezier(0.25, 0.1, 0.25, 1);
will-change: transform;
}
.job-sim-card {
flex: 0 0 320px;
}
.job-sim-link {
text-decoration: none;
color: inherit;
display: block;
}
.job-sim-link:hover {
color: inherit;
}
.header-actions {
display: flex;
align-items: center;
gap: 0.6rem;
margin-top: 0.25rem;
}
.certificate-btn {
display: flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
background: var(--bg-tertiary);
color: var(--primary);
border-radius: var(--radius-md);
text-decoration: none;
transition: all var(--transition-base);
cursor: pointer;
position: relative;
z-index: 2;
}
.certificate-btn:hover {
background: var(--primary);
color: var(--white);
transform: scale(1.1);
}
.certificate-btn i {
font-size: 0.85rem;
}
/* ============================================
Experiments Section
============================================ */
.experiments {
background: var(--bg-secondary);
}
.experiments-intro {
text-align: center;
color: var(--text-secondary);
font-size: 1.0625rem;
margin-bottom: 2.5rem;
max-width: 600px;
margin-left: auto;
margin-right: auto;
}
.experiments-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.5rem;
}
.experiment-card {
display: flex;
align-items: center;
gap: 1rem;
padding: 1.25rem 1.5rem;
background: var(--card-bg);
border-radius: var(--radius-xl);
border: 1px solid var(--border-color);
text-decoration: none;
transition: transform var(--transition-base), box-shadow var(--transition-base), border-color var(--transition-base);
will-change: transform;
}
.experiment-card:hover {
transform: translateY(-4px);
box-shadow: var(--card-shadow-hover);
border-color: var(--primary);
}
.experiment-icon {
width: 44px;
height: 44px;
border-radius: var(--radius-lg);
background: linear-gradient(135deg, var(--primary), var(--accent));
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.experiment-icon i {
font-size: 1.125rem;
color: var(--white);
}
.experiment-content {
flex: 1;
min-width: 0;
}
.experiment-content h3 {
font-size: 0.9375rem;
font-weight: 600;
color: var(--text-primary);
margin-bottom: 0.15rem;
}
.experiment-content p {
font-size: 0.8125rem;
color: var(--text-secondary);
line-height: 1.4;
}
.experiment-link {
width: 36px;
height: 36px;
border-radius: var(--radius-md);
background: var(--bg-tertiary);
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
transition: all var(--transition-base);
}
.experiment-link i {
font-size: 1rem;
color: var(--text-secondary);
}
.experiment-card:hover .experiment-link {
background: var(--primary);
}
.experiment-card:hover .experiment-link i {
color: var(--white);
}
/* ============================================
Contact Section
============================================ */
.contact {
background: var(--bg-secondary);
}
.contact-content {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
}
.contact-intro {
font-size: 1.125rem;
color: var(--text-secondary);
margin-bottom: 2rem;
line-height: 1.8;
}
.contact-links {
display: flex;
flex-direction: column;
gap: 1rem;
}
.contact-link {
display: flex;
align-items: center;
gap: 1rem;
padding: 1rem;
background: var(--card-bg);
border-radius: var(--radius-xl);
border: 1px solid var(--border-color);
transition: transform var(--transition-base), border-color var(--transition-base);
}
.contact-link:hover {
transform: translateX(8px);
border-color: var(--primary);
}
.contact-icon {
width: 48px;
height: 48px;
border-radius: var(--radius-lg);
background: linear-gradient(135deg, rgba(14, 165, 233, 0.1), rgba(20, 184, 166, 0.1));
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.contact-icon i {
font-size: 1.25rem;
color: var(--primary);
}
.contact-details {
display: flex;
flex-direction: column;
}
.contact-label {
font-size: 0.8125rem;
color: var(--text-tertiary);
text-transform: uppercase;
letter-spacing: 0.05em;
}
.contact-value {
font-weight: 500;
color: var(--text-primary);
}
/* Contact Form */
.contact-form-wrapper {
background: var(--card-bg);
padding: 2rem;
border-radius: var(--radius-xl);
border: 1px solid var(--border-color);
}
.contact-form {
display: flex;
flex-direction: column;
gap: 1.5rem;
}
.form-group {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.form-group label {
font-size: 0.875rem;
font-weight: 500;
color: var(--text-primary);
}
.form-group input,
.form-group textarea {
padding: 1rem;
border: 1px solid var(--border-color);
border-radius: var(--radius-lg);
background: var(--bg-primary);
color: var(--text-primary);
transition: all var(--transition-fast);
}
.form-group input:focus,
.form-group textarea:focus {
outline: none;
border-color: var(--primary);
box-shadow: 0 0 0 3px rgba(14, 165, 233, 0.1);
}
.form-group input::placeholder,
.form-group textarea::placeholder {
color: var(--text-tertiary);
}
.form-group textarea {
resize: vertical;
min-height: 120px;
}
.form-note {
text-align: center;
font-size: 0.875rem;
color: var(--text-tertiary);
margin-top: 0.5rem;
margin-bottom: 0;
}
/* Form Success/Error States */
.form-status {
text-align: center;
padding: 1rem;
border-radius: var(--radius-lg);
margin-top: 1rem;
}
.form-status.success {
background: rgba(34, 197, 94, 0.1);
color: #22c55e;
border: 1px solid rgba(34, 197, 94, 0.3);
}
.form-status.error {
background: rgba(239, 68, 68, 0.1);
color: #ef4444;
border: 1px solid rgba(239, 68, 68, 0.3);
}
/* ============================================
Footer
============================================ */
.footer {
background: var(--charcoal);
padding: 2rem 0;
}
.footer-content {
display: flex;
justify-content: space-between;
align-items: center;
}
.footer-content p {
color: var(--gray-400);
font-size: 0.9375rem;
}
.footer-socials {
display: flex;
gap: 1rem;
}
.footer-socials a {
width: 40px;
height: 40px;
border-radius: var(--radius-lg);
background: var(--gray-800);
display: flex;
align-items: center;
justify-content: center;
color: var(--gray-400);
transition: all var(--transition-fast);
}
.footer-socials a:hover {
background: var(--primary);
color: var(--white);
}
/* Brand Logo Icon Styling */
.brand-logo-icon {
width: 24px;
height: 24px;
object-fit: contain;
}
.contact-icon .brand-logo-icon {
width: 28px;
height: 28px;
}
/* ============================================
Responsive Design
============================================ */
@media (max-width: 1024px) {
.hero-container {
grid-template-columns: 1fr;
gap: 3rem;
text-align: center;
}
.hero-content {
display: flex;
flex-direction: column;
align-items: center;
}
.hero-description {
max-width: 100%;
}
.hero-cta {
justify-content: center;
}
.hero-stats {
justify-content: center;
}
.hero-visual {
order: -1;
}
.visual-card {
max-width: 400px;
}
.about-content {
grid-template-columns: 1fr;
gap: 3rem;
}
.contact-content {
grid-template-columns: 1fr;
gap: 2rem;
}
.experiments-grid {
grid-template-columns: repeat(2, 1fr);
}
}
/* Mobile Navigation Overlay */
.nav-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100vh;
background: rgba(0, 0, 0, 0.5);
opacity: 0;
visibility: hidden;
transition: all var(--transition-base);
z-index: 998;
}
.nav-overlay.active {
opacity: 1;
visibility: visible;
}
[data-theme="dark"] .nav-overlay {
background: rgba(0, 0, 0, 0.7);
}
@media (max-width: 768px) {
:root {
--section-padding: 3.5rem;
--container-padding: 1.25rem;
}
html,
body {
max-width: 100vw;
overflow-x: hidden;
}
.container,
.hero-container {
max-width: 100%;
width: 100%;
}
.section-header {
margin-bottom: 2.5rem;
}
.section-title {
font-size: 1.75rem;
}
.nav-menu {
position: fixed;
top: 0;
right: -100%;
width: 80%;
max-width: 320px;
height: 100vh;
background: var(--bg-primary);
flex-direction: column;
justify-content: center;
align-items: center;
gap: 2rem;
transition: right var(--transition-base);
box-shadow: -10px 0 30px rgba(0, 0, 0, 0.1);
z-index: 999;
}
.nav-menu.active {
right: 0;
}
/* Mobile Dropdown Styles */
.nav-dropdown {
width: 100%;
text-align: center;
}
.dropdown-toggle {
justify-content: center;
width: 100%;
padding: 0.75rem 1rem;
min-height: 44px;
}
.dropdown-menu {
position: static;
transform: none;
opacity: 1;
visibility: visible;
background: transparent;
border: none;
box-shadow: none;
padding: 0.5rem 0 0;
min-width: auto;
}
.dropdown-menu a {
padding: 0.75rem 1.5rem;
font-size: 0.875rem;
min-height: 44px;
display: flex;
align-items: center;
justify-content: center;
}
.nav-link {
padding: 0.75rem 1rem;
min-height: 44px;
display: flex;
align-items: center;
}
.nav-toggle {
display: flex;
z-index: 1001;
}
.nav-toggle.active span:nth-child(1) {
transform: rotate(45deg) translate(5px, 5px);
}
.nav-toggle.active span:nth-child(2) {
opacity: 0;
}
.nav-toggle.active span:nth-child(3) {
transform: rotate(-45deg) translate(5px, -5px);
}
.hero-title {
font-size: clamp(2rem, 8vw, 3rem);
}
.hero-tagline {
font-size: 1.25rem;
margin-bottom: 1rem;
}
.hero-description {
font-size: 1rem;
margin-bottom: 1.5rem;
}
.hero-stats {
gap: 1.5rem;
}
.stat-number,
.stat-plus {
font-size: 1.75rem;
}
.stat-label {
font-size: 0.75rem;
}
.code-block {
display: none;
}
.scroll-indicator {
display: none;
}
.about-grid {
gap: 2rem;
}
.about-text {
font-size: 1rem;
}
.highlight-card {
padding: 1.25rem;
width: 100%;
}
.about-text,
.about-highlights {
width: 100%;
}
.skills-grid {
grid-template-columns: 1fr;
gap: 1.5rem;
}
.skill-category {
padding: 1.25rem;
}
.projects-grid {
grid-template-columns: 1fr;
gap: 1.5rem;
}
.project-card {
padding: 1.25rem;
}
.achievements-grid {
gap: 1.25rem;
}
/* Achievement card carousel styles are defined in achievements section media queries */
.education-grid {
grid-template-columns: 1fr;
gap: 1.25rem;
}
.education-card {
flex-direction: column;
text-align: center;
padding: 1.25rem;
}
.education-icon {
margin: 0 auto;
}
.education-meta {
justify-content: center;
}
.leadership-grid {
grid-template-columns: 1fr;
gap: 1.25rem;
}
.leadership-card {
padding: 1.25rem;
}
.experiments-grid {
grid-template-columns: 1fr;
gap: 1rem;
}
.experiment-card {
padding: 1rem 1.25rem;
}
.experiments-intro {
font-size: 0.9375rem;
margin-bottom: 2rem;
}
.contact-info {
gap: 1rem;
}
.info-card {
padding: 1.25rem;
}
.contact-form {
padding: 1.5rem;
}
.footer-content {
flex-direction: column;
gap: 1rem;
text-align: center;
}
}
@media (max-width: 480px) {
:root {
--section-padding: 3rem;
--container-padding: 0.875rem;
}
html,
body {
max-width: 100vw;
overflow-x: hidden;
}
.container,
.hero-container {
max-width: 100%;
width: 100%;
padding-left: var(--container-padding);
padding-right: var(--container-padding);
}
.section-header {
margin-bottom: 2rem;
}
.section-title {
font-size: 1.5rem;
}
.section-tag {
font-size: 0.7rem;
padding: 0.35rem 0.75rem;
}
.hero-badge {
font-size: 0.75rem;
padding: 0.4rem 0.75rem;
margin-bottom: 1rem;
}
.hero-title {
font-size: 1.75rem;
margin-bottom: 0.75rem;
}
.hero-tagline {
font-size: 1.1rem;
}
.hero-cta {
flex-direction: column;
width: 100%;
gap: 0.75rem;
margin-bottom: 2rem;
}
.btn {
width: 100%;
padding: 1rem 1.5rem;
font-size: 0.95rem;
min-height: 48px;
}
.hero-stats {
flex-direction: row;
justify-content: center;
gap: 1.25rem;
flex-wrap: wrap;
}
.stat-number,
.stat-plus {
font-size: 1.5rem;
}
.about-text {
font-size: 0.95rem;
width: 100%;
}
.about-content,
.about-highlights {
width: 100%;
}
.highlight-card {
flex-direction: column;
text-align: center;
align-items: center;
padding: 1rem;
width: 100%;
}
.highlight-icon {
margin: 0 auto;
}
.highlight-card h4,
.highlight-card p {
text-align: center;
}
.skill-category h3 {
font-size: 1rem;
}
.skill-item {
font-size: 0.85rem;
padding: 0.4rem 0.75rem;
}
.project-title {
font-size: 1.1rem;
}
.project-description {
font-size: 0.9rem;
}
.soft-skills-grid {
flex-direction: column;
gap: 0.75rem;
}
.soft-skill-card {
width: 100%;
justify-content: center;
}
.timeline::before {
left: 6px;
}
.timeline-marker {
left: 0;
}
.timeline-item {
padding-left: 2rem;
}
.cert-grid {
gap: 0.75rem;
}
.cert-card {
padding: 0.875rem;
}
}
/* ============================================
Scroll Animations
============================================ */
.animate-on-scroll {
opacity: 0;
transform: translateY(30px);
transition: opacity 0.6s ease, transform 0.6s ease;
}
.animate-on-scroll.animated {
opacity: 1;
transform: translateY(0);
}
/* Stagger animations */
.stagger-1 {
transition-delay: 0.1s;
}
.stagger-2 {
transition-delay: 0.2s;
}
.stagger-3 {
transition-delay: 0.3s;
}
.stagger-4 {
transition-delay: 0.4s;
}
.stagger-5 {
transition-delay: 0.5s;
}
.stagger-6 {
transition-delay: 0.6s;
}
/* ============================================
Touch Device Optimizations
============================================ */
@media (hover: none) and (pointer: coarse) {
/* Disable hover effects on touch devices */
.project-card:hover,
.highlight-card:hover,
.skill-item:hover,
.cert-card:hover {
transform: none;
}
/* Active states for touch feedback */
.btn:active {
transform: scale(0.98);
opacity: 0.9;
}
.project-card:active,
.highlight-card:active {
transform: scale(0.99);
opacity: 0.95;
}
/* Ensure proper spacing for touch */
.skill-item {
padding: 0.6rem 1rem;
}
.contact-link {
padding: 1rem;
}
}
