Create a stunning, modern personal portfolio website for a professional web developer. The design should be clean, visually appealing, and fully responsive across all devices. The portfolio must use a modern UI/UX approach with smooth animations and transitions for an engaging user experience. The tech stack includes HTML5, CSS3 (TailwindCSS preferred), JavaScript (or React for SPA), and optional Framer Motion for animations. Key Features & Sections: Header & Navigation Sticky navigation bar with a transparent background that turns solid on scroll. Smooth scrolling to page sections. Animated hamburger menu for mobile view. Hero Section Full-screen hero with a high-quality background image or gradient. Animated introduction text (e.g., “Hi, I’m Kennedy” with typing or fade-in effect). Call-to-action button with hover effects (e.g., “View My Work”). Option for a Lottie animation or SVG illustration. About Me Section Profile photo in a circular frame with a hover zoom effect. Short bio with highlighted keywords using gradient text. Animated skill bars or icons with hover interactions. Skills Section Grid layout of skills with modern iconography. Hover effect: scale-up + shadow. Optional animated progress bars or radial charts for proficiency. Portfolio / Projects Section Grid or masonry layout for project cards. Each project card includes an image, title, description, and tech stack badges. On hover: smooth scale-up effect with overlay and “View Project” button. Modal or lightbox popup for project details. Services Section (Optional) Three to four cards for services offered (e.g., Web Development, App Development, UI/UX Design). Animated entry with fade-up or slide-in. Contact Section Modern form with floating labels and glassmorphism background. Integration with EmailJS or Formspree for email sending. Social media icons with hover animations (e.g., scale + color change). Footer Minimalistic footer with copyright. Quick links and social media icons. Modern Styling Guidelines Use TailwindCSS for fast and consistent styling. Implement Glassmorphism or Neumorphism elements for a modern feel. Use gradients (bg-gradient-to-r) for section headers or hero background. Smooth hover effects with transition-all duration-300 ease-in-out. Include dark mode toggle with smooth color transitions. Animations & Transitions Animate section entrances on scroll using AOS (Animate On Scroll) or Framer Motion. Button hover effects: subtle scaling + shadow pop. Typing effect for the hero text using Typed.js or CSS keyframes. Smooth page transitions when navigating sections. Technical Requirements Responsive design (mobile-first). SEO-friendly structure with proper meta tags. Performance optimized (lazy loading images, compressed assets). Deployable on GitHub Pages, Vercel, or Netlify. Color Palette & Fonts Modern gradient tones (e.g., purple → blue, teal → cyan). Use Google Fonts like Poppins, Inter, or Roboto for a clean look. Bonus Features Downloadable resume button. Interactive theme switcher (dark/light). Optional Parallax scrolling effect in the hero section. Personal Details Section Title: "Personal Details" or "More About Me". Display a different high-quality image (e.g., you working on a laptop, coding environment, or professional setting). Layout: Left side: Image with a modern frame (rounded corners, shadow, or glassmorphism). Right side: A structured list of personal information in two columns, such as: Full Name Date of Birth Location Email Phone Languages Each detail has an icon (use Lucide or Font Awesome) and a hover animation. Add Download CV button styled with gradient and hover transition. Animations: Image: Fade-in from left. Details: Slide-in from right with a delay for each row. Button: Scale-up on hover with subtle glow. Styling Ideas Use TailwindCSS classes: grid md:grid-cols-2 gap-8 p-6 bg-white/10 rounded-2xl backdrop-blur-lg shadow-lg. Font: Poppins or Inter for readability. Add gradient text headers using bg-gradient-to-r from-purple-500 to-cyan-400 bg-clip-text text-transparent. - Initial Deployment
Browse files- README.md +7 -5
- index.html +841 -19
README.md
CHANGED
|
@@ -1,10 +1,12 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
emoji:
|
| 4 |
-
colorFrom:
|
| 5 |
-
colorTo:
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
|
|
|
| 1 |
---
|
| 2 |
+
title: latest-portfolio
|
| 3 |
+
emoji: 🐳
|
| 4 |
+
colorFrom: pink
|
| 5 |
+
colorTo: yellow
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
| 8 |
+
tags:
|
| 9 |
+
- deepsite
|
| 10 |
---
|
| 11 |
|
| 12 |
+
Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
|
index.html
CHANGED
|
@@ -1,19 +1,841 @@
|
|
| 1 |
-
<!
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en" class="scroll-smooth">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>Kennedy | Web Developer Portfolio</title>
|
| 7 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 8 |
+
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
| 9 |
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
| 10 |
+
<script>
|
| 11 |
+
tailwind.config = {
|
| 12 |
+
darkMode: 'class',
|
| 13 |
+
theme: {
|
| 14 |
+
extend: {
|
| 15 |
+
fontFamily: {
|
| 16 |
+
poppins: ['Poppins', 'sans-serif'],
|
| 17 |
+
},
|
| 18 |
+
colors: {
|
| 19 |
+
primary: {
|
| 20 |
+
500: '#6366f1',
|
| 21 |
+
600: '#4f46e5',
|
| 22 |
+
},
|
| 23 |
+
secondary: {
|
| 24 |
+
500: '#06b6d4',
|
| 25 |
+
600: '#0891b2',
|
| 26 |
+
},
|
| 27 |
+
dark: {
|
| 28 |
+
900: '#0f172a',
|
| 29 |
+
800: '#1e293b',
|
| 30 |
+
700: '#334155',
|
| 31 |
+
}
|
| 32 |
+
},
|
| 33 |
+
animation: {
|
| 34 |
+
'fade-in': 'fadeIn 1s ease-in-out',
|
| 35 |
+
'slide-up': 'slideUp 0.5s ease-out',
|
| 36 |
+
'slide-left': 'slideLeft 0.5s ease-out',
|
| 37 |
+
'slide-right': 'slideRight 0.5s ease-out',
|
| 38 |
+
'typing': 'typing 3.5s steps(40, end), blink-caret .75s step-end infinite',
|
| 39 |
+
},
|
| 40 |
+
keyframes: {
|
| 41 |
+
fadeIn: {
|
| 42 |
+
'0%': { opacity: '0' },
|
| 43 |
+
'100%': { opacity: '1' },
|
| 44 |
+
},
|
| 45 |
+
slideUp: {
|
| 46 |
+
'0%': { transform: 'translateY(20px)', opacity: '0' },
|
| 47 |
+
'100%': { transform: 'translateY(0)', opacity: '1' },
|
| 48 |
+
},
|
| 49 |
+
slideLeft: {
|
| 50 |
+
'0%': { transform: 'translateX(20px)', opacity: '0' },
|
| 51 |
+
'100%': { transform: 'translateX(0)', opacity: '1' },
|
| 52 |
+
},
|
| 53 |
+
slideRight: {
|
| 54 |
+
'0%': { transform: 'translateX(-20px)', opacity: '0' },
|
| 55 |
+
'100%': { transform: 'translateX(0)', opacity: '1' },
|
| 56 |
+
},
|
| 57 |
+
typing: {
|
| 58 |
+
'from': { width: '0' },
|
| 59 |
+
'to': { width: '100%' },
|
| 60 |
+
},
|
| 61 |
+
}
|
| 62 |
+
}
|
| 63 |
+
}
|
| 64 |
+
}
|
| 65 |
+
</script>
|
| 66 |
+
<style>
|
| 67 |
+
html {
|
| 68 |
+
scroll-behavior: smooth;
|
| 69 |
+
}
|
| 70 |
+
body {
|
| 71 |
+
font-family: 'Poppins', sans-serif;
|
| 72 |
+
background-color: #f8fafc;
|
| 73 |
+
transition: background-color 0.3s ease;
|
| 74 |
+
}
|
| 75 |
+
.dark body {
|
| 76 |
+
background-color: #0f172a;
|
| 77 |
+
}
|
| 78 |
+
.glass-effect {
|
| 79 |
+
background: rgba(255, 255, 255, 0.1);
|
| 80 |
+
backdrop-filter: blur(10px);
|
| 81 |
+
-webkit-backdrop-filter: blur(10px);
|
| 82 |
+
border: 1px solid rgba(255, 255, 255, 0.18);
|
| 83 |
+
}
|
| 84 |
+
.dark .glass-effect {
|
| 85 |
+
background: rgba(15, 23, 42, 0.7);
|
| 86 |
+
}
|
| 87 |
+
.gradient-text {
|
| 88 |
+
background-image: linear-gradient(to right, #6366f1, #06b6d4);
|
| 89 |
+
-webkit-background-clip: text;
|
| 90 |
+
background-clip: text;
|
| 91 |
+
color: transparent;
|
| 92 |
+
}
|
| 93 |
+
.typing-cursor {
|
| 94 |
+
border-right: 2px solid;
|
| 95 |
+
animation: blink-caret 0.75s step-end infinite;
|
| 96 |
+
}
|
| 97 |
+
@keyframes blink-caret {
|
| 98 |
+
from, to { border-color: transparent }
|
| 99 |
+
50% { border-color: #06b6d4; }
|
| 100 |
+
}
|
| 101 |
+
.skill-bar {
|
| 102 |
+
height: 8px;
|
| 103 |
+
border-radius: 4px;
|
| 104 |
+
background: #e2e8f0;
|
| 105 |
+
overflow: hidden;
|
| 106 |
+
}
|
| 107 |
+
.dark .skill-bar {
|
| 108 |
+
background: #334155;
|
| 109 |
+
}
|
| 110 |
+
.skill-progress {
|
| 111 |
+
height: 100%;
|
| 112 |
+
border-radius: 4px;
|
| 113 |
+
background: linear-gradient(to right, #6366f1, #06b6d4);
|
| 114 |
+
transition: width 1.5s ease-out;
|
| 115 |
+
}
|
| 116 |
+
.project-card {
|
| 117 |
+
transition: all 0.3s ease;
|
| 118 |
+
}
|
| 119 |
+
.project-card:hover {
|
| 120 |
+
transform: translateY(-5px);
|
| 121 |
+
}
|
| 122 |
+
.project-overlay {
|
| 123 |
+
opacity: 0;
|
| 124 |
+
transition: all 0.3s ease;
|
| 125 |
+
}
|
| 126 |
+
.project-card:hover .project-overlay {
|
| 127 |
+
opacity: 1;
|
| 128 |
+
}
|
| 129 |
+
.floating-label {
|
| 130 |
+
position: absolute;
|
| 131 |
+
left: 15px;
|
| 132 |
+
top: 50%;
|
| 133 |
+
transform: translateY(-50%);
|
| 134 |
+
transition: all 0.3s ease;
|
| 135 |
+
pointer-events: none;
|
| 136 |
+
color: #64748b;
|
| 137 |
+
}
|
| 138 |
+
.dark .floating-label {
|
| 139 |
+
color: #94a3b8;
|
| 140 |
+
}
|
| 141 |
+
.form-input:focus + .floating-label,
|
| 142 |
+
.form-input:not(:placeholder-shown) + .floating-label {
|
| 143 |
+
top: 0;
|
| 144 |
+
left: 10px;
|
| 145 |
+
font-size: 12px;
|
| 146 |
+
background: #f8fafc;
|
| 147 |
+
padding: 0 5px;
|
| 148 |
+
color: #6366f1;
|
| 149 |
+
}
|
| 150 |
+
.dark .form-input:focus + .floating-label,
|
| 151 |
+
.dark .form-input:not(:placeholder-shown) + .floating-label {
|
| 152 |
+
background: #0f172a;
|
| 153 |
+
}
|
| 154 |
+
</style>
|
| 155 |
+
</head>
|
| 156 |
+
<body class="font-poppins text-slate-800 dark:text-slate-200">
|
| 157 |
+
<!-- Header & Navigation -->
|
| 158 |
+
<header class="fixed w-full z-50 transition-all duration-300" id="header">
|
| 159 |
+
<div class="container mx-auto px-6 py-4">
|
| 160 |
+
<div class="flex justify-between items-center">
|
| 161 |
+
<a href="#" class="text-2xl font-bold gradient-text">Kennedy</a>
|
| 162 |
+
|
| 163 |
+
<!-- Desktop Navigation -->
|
| 164 |
+
<nav class="hidden md:flex space-x-8">
|
| 165 |
+
<a href="#home" class="nav-link hover:text-primary-500 transition-colors">Home</a>
|
| 166 |
+
<a href="#about" class="nav-link hover:text-primary-500 transition-colors">About</a>
|
| 167 |
+
<a href="#skills" class="nav-link hover:text-primary-500 transition-colors">Skills</a>
|
| 168 |
+
<a href="#projects" class="nav-link hover:text-primary-500 transition-colors">Projects</a>
|
| 169 |
+
<a href="#contact" class="nav-link hover:text-primary-500 transition-colors">Contact</a>
|
| 170 |
+
</nav>
|
| 171 |
+
|
| 172 |
+
<!-- Dark Mode Toggle -->
|
| 173 |
+
<button id="theme-toggle" class="p-2 rounded-full focus:outline-none">
|
| 174 |
+
<i class="fas fa-moon text-xl text-slate-700 dark:text-yellow-300"></i>
|
| 175 |
+
</button>
|
| 176 |
+
|
| 177 |
+
<!-- Mobile Menu Button -->
|
| 178 |
+
<button id="mobile-menu-button" class="md:hidden p-2 rounded-full focus:outline-none">
|
| 179 |
+
<i class="fas fa-bars text-xl"></i>
|
| 180 |
+
</button>
|
| 181 |
+
</div>
|
| 182 |
+
</div>
|
| 183 |
+
|
| 184 |
+
<!-- Mobile Menu -->
|
| 185 |
+
<div id="mobile-menu" class="hidden md:hidden absolute top-20 left-0 right-0 bg-white dark:bg-dark-800 shadow-lg rounded-lg mx-4 py-4 transition-all duration-300">
|
| 186 |
+
<div class="flex flex-col space-y-4 px-6">
|
| 187 |
+
<a href="#home" class="nav-link hover:text-primary-500 transition-colors">Home</a>
|
| 188 |
+
<a href="#about" class="nav-link hover:text-primary-500 transition-colors">About</a>
|
| 189 |
+
<a href="#skills" class="nav-link hover:text-primary-500 transition-colors">Skills</a>
|
| 190 |
+
<a href="#projects" class="nav-link hover:text-primary-500 transition-colors">Projects</a>
|
| 191 |
+
<a href="#contact" class="nav-link hover:text-primary-500 transition-colors">Contact</a>
|
| 192 |
+
</div>
|
| 193 |
+
</div>
|
| 194 |
+
</header>
|
| 195 |
+
|
| 196 |
+
<!-- Hero Section -->
|
| 197 |
+
<section id="home" class="min-h-screen flex items-center justify-center bg-gradient-to-br from-indigo-50 to-cyan-50 dark:from-dark-900 dark:to-dark-800 relative overflow-hidden">
|
| 198 |
+
<div class="absolute inset-0 opacity-10 dark:opacity-5">
|
| 199 |
+
<div class="absolute inset-0 bg-[url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiPjxkZWZzPjxwYXR0ZXJuIGlkPSJwYXR0ZXJuIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiIHBhdHRlcm5UcmFuc2Zvcm09InJvdGF0ZSg0NSkiPjxyZWN0IHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgZmlsbD0icmdiYSgwLDAsMCwwLjAyKSIvPjwvcGF0dGVybj48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0idXJsKCNwYXR0ZXJuKSIvPjwvc3ZnPg==')]"></div>
|
| 200 |
+
</div>
|
| 201 |
+
<div class="container mx-auto px-6 z-10">
|
| 202 |
+
<div class="flex flex-col md:flex-row items-center justify-between">
|
| 203 |
+
<div class="md:w-1/2 mb-12 md:mb-0 animate-fade-in">
|
| 204 |
+
<h1 class="text-4xl md:text-6xl font-bold mb-4">
|
| 205 |
+
<span class="gradient-text">Hi, I'm Kennedy</span>
|
| 206 |
+
</h1>
|
| 207 |
+
<div class="text-2xl md:text-3xl font-semibold mb-6">
|
| 208 |
+
<span class="typing-text inline-block overflow-hidden whitespace-nowrap border-r-2 border-primary-500" id="typing-text"></span>
|
| 209 |
+
</div>
|
| 210 |
+
<p class="text-lg text-slate-600 dark:text-slate-300 mb-8 max-w-lg">
|
| 211 |
+
I craft exceptional digital experiences with clean, efficient code and intuitive designs. Let's build something amazing together.
|
| 212 |
+
</p>
|
| 213 |
+
<div class="flex space-x-4">
|
| 214 |
+
<a href="#projects" class="px-8 py-3 bg-gradient-to-r from-primary-500 to-secondary-500 text-white rounded-full font-medium hover:shadow-lg transition-all duration-300 hover:scale-105">
|
| 215 |
+
View My Work
|
| 216 |
+
</a>
|
| 217 |
+
<a href="#contact" class="px-8 py-3 border-2 border-primary-500 text-primary-500 dark:text-primary-400 rounded-full font-medium hover:bg-primary-500 hover:text-white dark:hover:text-white transition-all duration-300 hover:scale-105">
|
| 218 |
+
Contact Me
|
| 219 |
+
</a>
|
| 220 |
+
</div>
|
| 221 |
+
</div>
|
| 222 |
+
<div class="md:w-1/2 flex justify-center animate-slide-up">
|
| 223 |
+
<div class="relative">
|
| 224 |
+
<div class="w-64 h-64 md:w-80 md:h-80 rounded-full overflow-hidden border-4 border-white dark:border-dark-700 shadow-xl">
|
| 225 |
+
<img src="https://images.unsplash.com/photo-1571171637578-41bc2dd41cd2?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=880&q=80" alt="Kennedy" class="w-full h-full object-cover hover:scale-110 transition-transform duration-500">
|
| 226 |
+
</div>
|
| 227 |
+
<div class="absolute -bottom-5 -right-5 bg-white dark:bg-dark-800 p-3 rounded-full shadow-lg">
|
| 228 |
+
<div class="w-12 h-12 rounded-full bg-gradient-to-r from-primary-500 to-secondary-500 flex items-center justify-center text-white">
|
| 229 |
+
<i class="fas fa-code text-xl"></i>
|
| 230 |
+
</div>
|
| 231 |
+
</div>
|
| 232 |
+
</div>
|
| 233 |
+
</div>
|
| 234 |
+
</div>
|
| 235 |
+
</div>
|
| 236 |
+
<div class="absolute bottom-10 left-1/2 transform -translate-x-1/2 animate-bounce">
|
| 237 |
+
<a href="#about" class="text-slate-600 dark:text-slate-300 hover:text-primary-500 transition-colors">
|
| 238 |
+
<i class="fas fa-chevron-down text-2xl"></i>
|
| 239 |
+
</a>
|
| 240 |
+
</div>
|
| 241 |
+
</section>
|
| 242 |
+
|
| 243 |
+
<!-- About Section -->
|
| 244 |
+
<section id="about" class="py-20 bg-white dark:bg-dark-900">
|
| 245 |
+
<div class="container mx-auto px-6">
|
| 246 |
+
<div class="text-center mb-16">
|
| 247 |
+
<h2 class="text-3xl md:text-4xl font-bold mb-4">
|
| 248 |
+
<span class="gradient-text">About Me</span>
|
| 249 |
+
</h2>
|
| 250 |
+
<div class="w-20 h-1 bg-gradient-to-r from-primary-500 to-secondary-500 mx-auto"></div>
|
| 251 |
+
</div>
|
| 252 |
+
|
| 253 |
+
<div class="flex flex-col md:flex-row items-center gap-12">
|
| 254 |
+
<div class="md:w-1/2 animate-slide-left">
|
| 255 |
+
<div class="relative">
|
| 256 |
+
<div class="w-full h-80 md:h-96 rounded-2xl overflow-hidden shadow-xl">
|
| 257 |
+
<img src="https://images.unsplash.com/photo-1522071820081-009f0129c71c?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80" alt="Kennedy working" class="w-full h-full object-cover hover:scale-105 transition-transform duration-500">
|
| 258 |
+
</div>
|
| 259 |
+
<div class="absolute -bottom-5 -right-5 bg-white dark:bg-dark-800 p-4 rounded-xl shadow-lg glass-effect">
|
| 260 |
+
<div class="flex items-center">
|
| 261 |
+
<div class="w-12 h-12 rounded-full bg-gradient-to-r from-primary-500 to-secondary-500 flex items-center justify-center text-white mr-3">
|
| 262 |
+
<i class="fas fa-medal text-xl"></i>
|
| 263 |
+
</div>
|
| 264 |
+
<div>
|
| 265 |
+
<p class="font-bold text-sm">5+ Years</p>
|
| 266 |
+
<p class="text-xs text-slate-500 dark:text-slate-400">Experience</p>
|
| 267 |
+
</div>
|
| 268 |
+
</div>
|
| 269 |
+
</div>
|
| 270 |
+
</div>
|
| 271 |
+
</div>
|
| 272 |
+
|
| 273 |
+
<div class="md:w-1/2 animate-slide-right">
|
| 274 |
+
<h3 class="text-2xl font-bold mb-6">Personal Details</h3>
|
| 275 |
+
|
| 276 |
+
<div class="grid grid-cols-2 gap-4 mb-8">
|
| 277 |
+
<div class="flex items-center">
|
| 278 |
+
<div class="w-10 h-10 rounded-full bg-indigo-100 dark:bg-dark-700 flex items-center justify-center mr-3">
|
| 279 |
+
<i class="fas fa-user text-primary-500"></i>
|
| 280 |
+
</div>
|
| 281 |
+
<div>
|
| 282 |
+
<p class="text-sm text-slate-500 dark:text-slate-400">Full Name</p>
|
| 283 |
+
<p class="font-medium">Kennedy Smith</p>
|
| 284 |
+
</div>
|
| 285 |
+
</div>
|
| 286 |
+
<div class="flex items-center">
|
| 287 |
+
<div class="w-10 h-10 rounded-full bg-indigo-100 dark:bg-dark-700 flex items-center justify-center mr-3">
|
| 288 |
+
<i class="fas fa-calendar text-primary-500"></i>
|
| 289 |
+
</div>
|
| 290 |
+
<div>
|
| 291 |
+
<p class="text-sm text-slate-500 dark:text-slate-400">Date of Birth</p>
|
| 292 |
+
<p class="font-medium">15 March 1992</p>
|
| 293 |
+
</div>
|
| 294 |
+
</div>
|
| 295 |
+
<div class="flex items-center">
|
| 296 |
+
<div class="w-10 h-10 rounded-full bg-indigo-100 dark:bg-dark-700 flex items-center justify-center mr-3">
|
| 297 |
+
<i class="fas fa-map-marker-alt text-primary-500"></i>
|
| 298 |
+
</div>
|
| 299 |
+
<div>
|
| 300 |
+
<p class="text-sm text-slate-500 dark:text-slate-400">Location</p>
|
| 301 |
+
<p class="font-medium">San Francisco, USA</p>
|
| 302 |
+
</div>
|
| 303 |
+
</div>
|
| 304 |
+
<div class="flex items-center">
|
| 305 |
+
<div class="w-10 h-10 rounded-full bg-indigo-100 dark:bg-dark-700 flex items-center justify-center mr-3">
|
| 306 |
+
<i class="fas fa-envelope text-primary-500"></i>
|
| 307 |
+
</div>
|
| 308 |
+
<div>
|
| 309 |
+
<p class="text-sm text-slate-500 dark:text-slate-400">Email</p>
|
| 310 |
+
<p class="font-medium">hello@kennedy.dev</p>
|
| 311 |
+
</div>
|
| 312 |
+
</div>
|
| 313 |
+
<div class="flex items-center">
|
| 314 |
+
<div class="w-10 h-10 rounded-full bg-indigo-100 dark:bg-dark-700 flex items-center justify-center mr-3">
|
| 315 |
+
<i class="fas fa-phone text-primary-500"></i>
|
| 316 |
+
</div>
|
| 317 |
+
<div>
|
| 318 |
+
<p class="text-sm text-slate-500 dark:text-slate-400">Phone</p>
|
| 319 |
+
<p class="font-medium">+1 (555) 123-4567</p>
|
| 320 |
+
</div>
|
| 321 |
+
</div>
|
| 322 |
+
<div class="flex items-center">
|
| 323 |
+
<div class="w-10 h-10 rounded-full bg-indigo-100 dark:bg-dark-700 flex items-center justify-center mr-3">
|
| 324 |
+
<i class="fas fa-language text-primary-500"></i>
|
| 325 |
+
</div>
|
| 326 |
+
<div>
|
| 327 |
+
<p class="text-sm text-slate-500 dark:text-slate-400">Languages</p>
|
| 328 |
+
<p class="font-medium">English, Spanish</p>
|
| 329 |
+
</div>
|
| 330 |
+
</div>
|
| 331 |
+
</div>
|
| 332 |
+
|
| 333 |
+
<p class="text-slate-600 dark:text-slate-300 mb-6">
|
| 334 |
+
I'm a passionate web developer with over 5 years of experience creating modern, responsive websites and web applications. My expertise lies in front-end development with React and Vue.js, but I'm also proficient in back-end technologies like Node.js and Django.
|
| 335 |
+
</p>
|
| 336 |
+
<p class="text-slate-600 dark:text-slate-300 mb-8">
|
| 337 |
+
When I'm not coding, you can find me hiking in the mountains, reading sci-fi novels, or experimenting with new recipes in the kitchen. I believe in continuous learning and staying updated with the latest web technologies.
|
| 338 |
+
</p>
|
| 339 |
+
|
| 340 |
+
<div class="flex flex-wrap gap-4">
|
| 341 |
+
<a href="#" class="px-6 py-3 bg-gradient-to-r from-primary-500 to-secondary-500 text-white rounded-full font-medium hover:shadow-lg transition-all duration-300 hover:scale-105 flex items-center">
|
| 342 |
+
<i class="fas fa-download mr-2"></i> Download CV
|
| 343 |
+
</a>
|
| 344 |
+
<a href="#contact" class="px-6 py-3 border border-primary-500 text-primary-500 dark:text-primary-400 rounded-full font-medium hover:bg-primary-500 hover:text-white dark:hover:text-white transition-all duration-300 hover:scale-105 flex items-center">
|
| 345 |
+
<i class="fas fa-paper-plane mr-2"></i> Hire Me
|
| 346 |
+
</a>
|
| 347 |
+
</div>
|
| 348 |
+
</div>
|
| 349 |
+
</div>
|
| 350 |
+
</div>
|
| 351 |
+
</section>
|
| 352 |
+
|
| 353 |
+
<!-- Skills Section -->
|
| 354 |
+
<section id="skills" class="py-20 bg-slate-50 dark:bg-dark-800">
|
| 355 |
+
<div class="container mx-auto px-6">
|
| 356 |
+
<div class="text-center mb-16">
|
| 357 |
+
<h2 class="text-3xl md:text-4xl font-bold mb-4">
|
| 358 |
+
<span class="gradient-text">My Skills</span>
|
| 359 |
+
</h2>
|
| 360 |
+
<div class="w-20 h-1 bg-gradient-to-r from-primary-500 to-secondary-500 mx-auto"></div>
|
| 361 |
+
</div>
|
| 362 |
+
|
| 363 |
+
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6">
|
| 364 |
+
<!-- Skill 1 -->
|
| 365 |
+
<div class="bg-white dark:bg-dark-700 p-6 rounded-xl shadow-md hover:shadow-xl transition-all duration-300 hover:-translate-y-1 animate-fade-in">
|
| 366 |
+
<div class="w-16 h-16 bg-indigo-100 dark:bg-dark-600 rounded-full flex items-center justify-center mb-4 mx-auto">
|
| 367 |
+
<i class="fab fa-html5 text-3xl text-orange-500"></i>
|
| 368 |
+
</div>
|
| 369 |
+
<h3 class="text-center font-bold mb-2">HTML5</h3>
|
| 370 |
+
<div class="skill-bar">
|
| 371 |
+
<div class="skill-progress" style="width: 95%"></div>
|
| 372 |
+
</div>
|
| 373 |
+
</div>
|
| 374 |
+
|
| 375 |
+
<!-- Skill 2 -->
|
| 376 |
+
<div class="bg-white dark:bg-dark-700 p-6 rounded-xl shadow-md hover:shadow-xl transition-all duration-300 hover:-translate-y-1 animate-fade-in">
|
| 377 |
+
<div class="w-16 h-16 bg-indigo-100 dark:bg-dark-600 rounded-full flex items-center justify-center mb-4 mx-auto">
|
| 378 |
+
<i class="fab fa-css3-alt text-3xl text-blue-500"></i>
|
| 379 |
+
</div>
|
| 380 |
+
<h3 class="text-center font-bold mb-2">CSS3</h3>
|
| 381 |
+
<div class="skill-bar">
|
| 382 |
+
<div class="skill-progress" style="width: 90%"></div>
|
| 383 |
+
</div>
|
| 384 |
+
</div>
|
| 385 |
+
|
| 386 |
+
<!-- Skill 3 -->
|
| 387 |
+
<div class="bg-white dark:bg-dark-700 p-6 rounded-xl shadow-md hover:shadow-xl transition-all duration-300 hover:-translate-y-1 animate-fade-in">
|
| 388 |
+
<div class="w-16 h-16 bg-indigo-100 dark:bg-dark-600 rounded-full flex items-center justify-center mb-4 mx-auto">
|
| 389 |
+
<i class="fab fa-js text-3xl text-yellow-400"></i>
|
| 390 |
+
</div>
|
| 391 |
+
<h3 class="text-center font-bold mb-2">JavaScript</h3>
|
| 392 |
+
<div class="skill-bar">
|
| 393 |
+
<div class="skill-progress" style="width: 85%"></div>
|
| 394 |
+
</div>
|
| 395 |
+
</div>
|
| 396 |
+
|
| 397 |
+
<!-- Skill 4 -->
|
| 398 |
+
<div class="bg-white dark:bg-dark-700 p-6 rounded-xl shadow-md hover:shadow-xl transition-all duration-300 hover:-translate-y-1 animate-fade-in">
|
| 399 |
+
<div class="w-16 h-16 bg-indigo-100 dark:bg-dark-600 rounded-full flex items-center justify-center mb-4 mx-auto">
|
| 400 |
+
<i class="fab fa-react text-3xl text-blue-400"></i>
|
| 401 |
+
</div>
|
| 402 |
+
<h3 class="text-center font-bold mb-2">React</h3>
|
| 403 |
+
<div class="skill-bar">
|
| 404 |
+
<div class="skill-progress" style="width: 80%"></div>
|
| 405 |
+
</div>
|
| 406 |
+
</div>
|
| 407 |
+
|
| 408 |
+
<!-- Skill 5 -->
|
| 409 |
+
<div class="bg-white dark:bg-dark-700 p-6 rounded-xl shadow-md hover:shadow-xl transition-all duration-300 hover:-translate-y-1 animate-fade-in">
|
| 410 |
+
<div class="w-16 h-16 bg-indigo-100 dark:bg-dark-600 rounded-full flex items-center justify-center mb-4 mx-auto">
|
| 411 |
+
<i class="fab fa-vuejs text-3xl text-green-500"></i>
|
| 412 |
+
</div>
|
| 413 |
+
<h3 class="text-center font-bold mb-2">Vue.js</h3>
|
| 414 |
+
<div class="skill-bar">
|
| 415 |
+
<div class="skill-progress" style="width: 75%"></div>
|
| 416 |
+
</div>
|
| 417 |
+
</div>
|
| 418 |
+
|
| 419 |
+
<!-- Skill 6 -->
|
| 420 |
+
<div class="bg-white dark:bg-dark-700 p-6 rounded-xl shadow-md hover:shadow-xl transition-all duration-300 hover:-translate-y-1 animate-fade-in">
|
| 421 |
+
<div class="w-16 h-16 bg-indigo-100 dark:bg-dark-600 rounded-full flex items-center justify-center mb-4 mx-auto">
|
| 422 |
+
<i class="fab fa-node-js text-3xl text-green-600"></i>
|
| 423 |
+
</div>
|
| 424 |
+
<h3 class="text-center font-bold mb-2">Node.js</h3>
|
| 425 |
+
<div class="skill-bar">
|
| 426 |
+
<div class="skill-progress" style="width: 70%"></div>
|
| 427 |
+
</div>
|
| 428 |
+
</div>
|
| 429 |
+
|
| 430 |
+
<!-- Skill 7 -->
|
| 431 |
+
<div class="bg-white dark:bg-dark-700 p-6 rounded-xl shadow-md hover:shadow-xl transition-all duration-300 hover:-translate-y-1 animate-fade-in">
|
| 432 |
+
<div class="w-16 h-16 bg-indigo-100 dark:bg-dark-600 rounded-full flex items-center justify-center mb-4 mx-auto">
|
| 433 |
+
<i class="fab fa-python text-3xl text-blue-600"></i>
|
| 434 |
+
</div>
|
| 435 |
+
<h3 class="text-center font-bold mb-2">Python</h3>
|
| 436 |
+
<div class="skill-bar">
|
| 437 |
+
<div class="skill-progress" style="width: 65%"></div>
|
| 438 |
+
</div>
|
| 439 |
+
</div>
|
| 440 |
+
|
| 441 |
+
<!-- Skill 8 -->
|
| 442 |
+
<div class="bg-white dark:bg-dark-700 p-6 rounded-xl shadow-md hover:shadow-xl transition-all duration-300 hover:-translate-y-1 animate-fade-in">
|
| 443 |
+
<div class="w-16 h-16 bg-indigo-100 dark:bg-dark-600 rounded-full flex items-center justify-center mb-4 mx-auto">
|
| 444 |
+
<i class="fas fa-database text-3xl text-blue-700"></i>
|
| 445 |
+
</div>
|
| 446 |
+
<h3 class="text-center font-bold mb-2">MongoDB</h3>
|
| 447 |
+
<div class="skill-bar">
|
| 448 |
+
<div class="skill-progress" style="width: 60%"></div>
|
| 449 |
+
</div>
|
| 450 |
+
</div>
|
| 451 |
+
</div>
|
| 452 |
+
</div>
|
| 453 |
+
</section>
|
| 454 |
+
|
| 455 |
+
<!-- Projects Section -->
|
| 456 |
+
<section id="projects" class="py-20 bg-white dark:bg-dark-900">
|
| 457 |
+
<div class="container mx-auto px-6">
|
| 458 |
+
<div class="text-center mb-16">
|
| 459 |
+
<h2 class="text-3xl md:text-4xl font-bold mb-4">
|
| 460 |
+
<span class="gradient-text">My Projects</span>
|
| 461 |
+
</h2>
|
| 462 |
+
<div class="w-20 h-1 bg-gradient-to-r from-primary-500 to-secondary-500 mx-auto"></div>
|
| 463 |
+
</div>
|
| 464 |
+
|
| 465 |
+
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
| 466 |
+
<!-- Project 1 -->
|
| 467 |
+
<div class="project-card bg-white dark:bg-dark-800 rounded-xl shadow-md overflow-hidden animate-fade-in">
|
| 468 |
+
<div class="relative overflow-hidden">
|
| 469 |
+
<img src="https://images.unsplash.com/photo-1551288049-bebda4e38f71?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80" alt="E-commerce Dashboard" class="w-full h-48 object-cover transition-transform duration-500">
|
| 470 |
+
<div class="project-overlay absolute inset-0 bg-gradient-to-t from-black/80 to-transparent flex items-end p-6">
|
| 471 |
+
<div>
|
| 472 |
+
<div class="flex flex-wrap gap-2 mb-3">
|
| 473 |
+
<span class="text-xs px-2 py-1 bg-primary-500/10 text-primary-500 dark:text-primary-400 rounded">React</span>
|
| 474 |
+
<span class="text-xs px-2 py-1 bg-primary-500/10 text-primary-500 dark:text-primary-400 rounded">Node.js</span>
|
| 475 |
+
<span class="text-xs px-2 py-1 bg-primary-500/10 text-primary-500 dark:text-primary-400 rounded">MongoDB</span>
|
| 476 |
+
</div>
|
| 477 |
+
<a href="#" class="px-4 py-2 bg-gradient-to-r from-primary-500 to-secondary-500 text-white rounded-full text-sm font-medium inline-block hover:shadow-lg transition-all duration-300">
|
| 478 |
+
View Project
|
| 479 |
+
</a>
|
| 480 |
+
</div>
|
| 481 |
+
</div>
|
| 482 |
+
</div>
|
| 483 |
+
<div class="p-6">
|
| 484 |
+
<h3 class="text-xl font-bold mb-2">E-commerce Dashboard</h3>
|
| 485 |
+
<p class="text-slate-600 dark:text-slate-300 mb-4">A comprehensive dashboard for managing online stores with analytics, inventory, and order management.</p>
|
| 486 |
+
</div>
|
| 487 |
+
</div>
|
| 488 |
+
|
| 489 |
+
<!-- Project 2 -->
|
| 490 |
+
<div class="project-card bg-white dark:bg-dark-800 rounded-xl shadow-md overflow-hidden animate-fade-in">
|
| 491 |
+
<div class="relative overflow-hidden">
|
| 492 |
+
<img src="https://images.unsplash.com/photo-1467232004584-a241de8bcf5d?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1169&q=80" alt="Travel App" class="w-full h-48 object-cover transition-transform duration-500">
|
| 493 |
+
<div class="project-overlay absolute inset-0 bg-gradient-to-t from-black/80 to-transparent flex items-end p-6">
|
| 494 |
+
<div>
|
| 495 |
+
<div class="flex flex-wrap gap-2 mb-3">
|
| 496 |
+
<span class="text-xs px-2 py-1 bg-primary-500/10 text-primary-500 dark:text-primary-400 rounded">Vue.js</span>
|
| 497 |
+
<span class="text-xs px-2 py-1 bg-primary-500/10 text-primary-500 dark:text-primary-400 rounded">Firebase</span>
|
| 498 |
+
<span class="text-xs px-2 py-1 bg-primary-500/10 text-primary-500 dark:text-primary-400 rounded">Mapbox</span>
|
| 499 |
+
</div>
|
| 500 |
+
<a href="#" class="px-4 py-2 bg-gradient-to-r from-primary-500 to-secondary-500 text-white rounded-full text-sm font-medium inline-block hover:shadow-lg transition-all duration-300">
|
| 501 |
+
View Project
|
| 502 |
+
</a>
|
| 503 |
+
</div>
|
| 504 |
+
</div>
|
| 505 |
+
</div>
|
| 506 |
+
<div class="p-6">
|
| 507 |
+
<h3 class="text-xl font-bold mb-2">Travel Companion App</h3>
|
| 508 |
+
<p class="text-slate-600 dark:text-slate-300 mb-4">An interactive travel app that helps users discover and plan trips with real-time weather and local recommendations.</p>
|
| 509 |
+
</div>
|
| 510 |
+
</div>
|
| 511 |
+
|
| 512 |
+
<!-- Project 3 -->
|
| 513 |
+
<div class="project-card bg-white dark:bg-dark-800 rounded-xl shadow-md overflow-hidden animate-fade-in">
|
| 514 |
+
<div class="relative overflow-hidden">
|
| 515 |
+
<img src="https://images.unsplash.com/photo-1551434678-e076c223a692?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80" alt="Task Manager" class="w-full h-48 object-cover transition-transform duration-500">
|
| 516 |
+
<div class="project-overlay absolute inset-0 bg-gradient-to-t from-black/80 to-transparent flex items-end p-6">
|
| 517 |
+
<div>
|
| 518 |
+
<div class="flex flex-wrap gap-2 mb-3">
|
| 519 |
+
<span class="text-xs px-2 py-1 bg-primary-500/10 text-primary-500 dark:text-primary-400 rounded">React</span>
|
| 520 |
+
<span class="text-xs px-2 py-1 bg-primary-500/10 text-primary-500 dark:text-primary-400 rounded">Redux</span>
|
| 521 |
+
<span class="text-xs px-2 py-1 bg-primary-500/10 text-primary-500 dark:text-primary-400 rounded">TailwindCSS</span>
|
| 522 |
+
</div>
|
| 523 |
+
<a href="#" class="px-4 py-2 bg-gradient-to-r from-primary-500 to-secondary-500 text-white rounded-full text-sm font-medium inline-block hover:shadow-lg transition-all duration-300">
|
| 524 |
+
View Project
|
| 525 |
+
</a>
|
| 526 |
+
</div>
|
| 527 |
+
</div>
|
| 528 |
+
</div>
|
| 529 |
+
<div class="p-6">
|
| 530 |
+
<h3 class="text-xl font-bold mb-2">Task Management System</h3>
|
| 531 |
+
<p class="text-slate-600 dark:text-slate-300 mb-4">A collaborative task management tool with drag-and-drop functionality, team assignments, and progress tracking.</p>
|
| 532 |
+
</div>
|
| 533 |
+
</div>
|
| 534 |
+
</div>
|
| 535 |
+
|
| 536 |
+
<div class="text-center mt-12">
|
| 537 |
+
<a href="#" class="px-8 py-3 border-2 border-primary-500 text-primary-500 dark:text-primary-400 rounded-full font-medium hover:bg-primary-500 hover:text-white dark:hover:text-white transition-all duration-300 hover:scale-105 inline-flex items-center">
|
| 538 |
+
<i class="fas fa-eye mr-2"></i> View All Projects
|
| 539 |
+
</a>
|
| 540 |
+
</div>
|
| 541 |
+
</div>
|
| 542 |
+
</section>
|
| 543 |
+
|
| 544 |
+
<!-- Contact Section -->
|
| 545 |
+
<section id="contact" class="py-20 bg-slate-50 dark:bg-dark-800">
|
| 546 |
+
<div class="container mx-auto px-6">
|
| 547 |
+
<div class="text-center mb-16">
|
| 548 |
+
<h2 class="text-3xl md:text-4xl font-bold mb-4">
|
| 549 |
+
<span class="gradient-text">Get In Touch</span>
|
| 550 |
+
</h2>
|
| 551 |
+
<div class="w-20 h-1 bg-gradient-to-r from-primary-500 to-secondary-500 mx-auto"></div>
|
| 552 |
+
</div>
|
| 553 |
+
|
| 554 |
+
<div class="flex flex-col lg:flex-row gap-12">
|
| 555 |
+
<div class="lg:w-1/2 animate-slide-left">
|
| 556 |
+
<h3 class="text-2xl font-bold mb-6">Contact Information</h3>
|
| 557 |
+
<p class="text-slate-600 dark:text-slate-300 mb-8">
|
| 558 |
+
Feel free to reach out to me for any questions or opportunities. I'm always open to discussing new projects, creative ideas or opportunities to be part of your vision.
|
| 559 |
+
</p>
|
| 560 |
+
|
| 561 |
+
<div class="space-y-6">
|
| 562 |
+
<div class="flex items-start">
|
| 563 |
+
<div class="w-12 h-12 rounded-full bg-indigo-100 dark:bg-dark-700 flex items-center justify-center mr-4 flex-shrink-0">
|
| 564 |
+
<i class="fas fa-map-marker-alt text-primary-500 text-xl"></i>
|
| 565 |
+
</div>
|
| 566 |
+
<div>
|
| 567 |
+
<h4 class="font-bold mb-1">Location</h4>
|
| 568 |
+
<p class="text-slate-600 dark:text-slate-300">San Francisco, California</p>
|
| 569 |
+
</div>
|
| 570 |
+
</div>
|
| 571 |
+
|
| 572 |
+
<div class="flex items-start">
|
| 573 |
+
<div class="w-12 h-12 rounded-full bg-indigo-100 dark:bg-dark-700 flex items-center justify-center mr-4 flex-shrink-0">
|
| 574 |
+
<i class="fas fa-envelope text-primary-500 text-xl"></i>
|
| 575 |
+
</div>
|
| 576 |
+
<div>
|
| 577 |
+
<h4 class="font-bold mb-1">Email</h4>
|
| 578 |
+
<p class="text-slate-600 dark:text-slate-300">hello@kennedy.dev</p>
|
| 579 |
+
</div>
|
| 580 |
+
</div>
|
| 581 |
+
|
| 582 |
+
<div class="flex items-start">
|
| 583 |
+
<div class="w-12 h-12 rounded-full bg-indigo-100 dark:bg-dark-700 flex items-center justify-center mr-4 flex-shrink-0">
|
| 584 |
+
<i class="fas fa-phone text-primary-500 text-xl"></i>
|
| 585 |
+
</div>
|
| 586 |
+
<div>
|
| 587 |
+
<h4 class="font-bold mb-1">Phone</h4>
|
| 588 |
+
<p class="text-slate-600 dark:text-slate-300">+1 (555) 123-4567</p>
|
| 589 |
+
</div>
|
| 590 |
+
</div>
|
| 591 |
+
</div>
|
| 592 |
+
|
| 593 |
+
<div class="mt-8">
|
| 594 |
+
<h4 class="font-bold mb-4">Follow Me</h4>
|
| 595 |
+
<div class="flex space-x-4">
|
| 596 |
+
<a href="#" class="w-10 h-10 rounded-full bg-indigo-100 dark:bg-dark-700 flex items-center justify-center text-slate-700 dark:text-slate-300 hover:bg-primary-500 hover:text-white transition-colors duration-300">
|
| 597 |
+
<i class="fab fa-github"></i>
|
| 598 |
+
</a>
|
| 599 |
+
<a href="#" class="w-10 h-10 rounded-full bg-indigo-100 dark:bg-dark-700 flex items-center justify-center text-slate-700 dark:text-slate-300 hover:bg-blue-500 hover:text-white transition-colors duration-300">
|
| 600 |
+
<i class="fab fa-linkedin-in"></i>
|
| 601 |
+
</a>
|
| 602 |
+
<a href="#" class="w-10 h-10 rounded-full bg-indigo-100 dark:bg-dark-700 flex items-center justify-center text-slate-700 dark:text-slate-300 hover:bg-blue-400 hover:text-white transition-colors duration-300">
|
| 603 |
+
<i class="fab fa-twitter"></i>
|
| 604 |
+
</a>
|
| 605 |
+
<a href="#" class="w-10 h-10 rounded-full bg-indigo-100 dark:bg-dark-700 flex items-center justify-center text-slate-700 dark:text-slate-300 hover:bg-pink-500 hover:text-white transition-colors duration-300">
|
| 606 |
+
<i class="fab fa-dribbble"></i>
|
| 607 |
+
</a>
|
| 608 |
+
</div>
|
| 609 |
+
</div>
|
| 610 |
+
</div>
|
| 611 |
+
|
| 612 |
+
<div class="lg:w-1/2 animate-slide-right">
|
| 613 |
+
<form class="bg-white dark:bg-dark-700 p-8 rounded-xl shadow-md">
|
| 614 |
+
<div class="mb-6 relative">
|
| 615 |
+
<input type="text" id="name" class="form-input w-full px-4 py-3 border border-slate-300 dark:border-dark-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent" placeholder=" ">
|
| 616 |
+
<label for="name" class="floating-label">Your Name</label>
|
| 617 |
+
</div>
|
| 618 |
+
|
| 619 |
+
<div class="mb-6 relative">
|
| 620 |
+
<input type="email" id="email" class="form-input w-full px-4 py-3 border border-slate-300 dark:border-dark-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent" placeholder=" ">
|
| 621 |
+
<label for="email" class="floating-label">Your Email</label>
|
| 622 |
+
</div>
|
| 623 |
+
|
| 624 |
+
<div class="mb-6 relative">
|
| 625 |
+
<input type="text" id="subject" class="form-input w-full px-4 py-3 border border-slate-300 dark:border-dark-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent" placeholder=" ">
|
| 626 |
+
<label for="subject" class="floating-label">Subject</label>
|
| 627 |
+
</div>
|
| 628 |
+
|
| 629 |
+
<div class="mb-6 relative">
|
| 630 |
+
<textarea id="message" rows="5" class="form-input w-full px-4 py-3 border border-slate-300 dark:border-dark-600 rounded-lg focus:outline-none focus:ring-2 focus:ring-primary-500 focus:border-transparent" placeholder=" "></textarea>
|
| 631 |
+
<label for="message" class="floating-label">Your Message</label>
|
| 632 |
+
</div>
|
| 633 |
+
|
| 634 |
+
<button type="submit" class="w-full px-6 py-3 bg-gradient-to-r from-primary-500 to-secondary-500 text-white rounded-lg font-medium hover:shadow-lg transition-all duration-300 hover:scale-105">
|
| 635 |
+
Send Message
|
| 636 |
+
</button>
|
| 637 |
+
</form>
|
| 638 |
+
</div>
|
| 639 |
+
</div>
|
| 640 |
+
</div>
|
| 641 |
+
</section>
|
| 642 |
+
|
| 643 |
+
<!-- Footer -->
|
| 644 |
+
<footer class="bg-dark-900 text-white py-12">
|
| 645 |
+
<div class="container mx-auto px-6">
|
| 646 |
+
<div class="flex flex-col md:flex-row justify-between items-center">
|
| 647 |
+
<div class="mb-6 md:mb-0">
|
| 648 |
+
<a href="#" class="text-2xl font-bold gradient-text">Kennedy</a>
|
| 649 |
+
<p class="text-slate-400 mt-2">© 2023 Kennedy. All rights reserved.</p>
|
| 650 |
+
</div>
|
| 651 |
+
|
| 652 |
+
<div class="flex flex-col md:flex-row md:space-x-8 space-y-4 md:space-y-0">
|
| 653 |
+
<div>
|
| 654 |
+
<h4 class="font-bold mb-4">Quick Links</h4>
|
| 655 |
+
<ul class="space-y-2">
|
| 656 |
+
<li><a href="#home" class="text-slate-400 hover:text-white transition-colors">Home</a></li>
|
| 657 |
+
<li><a href="#about" class="text-slate-400 hover:text-white transition-colors">About</a></li>
|
| 658 |
+
<li><a href="#skills" class="text-slate-400 hover:text-white transition-colors">Skills</a></li>
|
| 659 |
+
<li><a href="#projects" class="text-slate-400 hover:text-white transition-colors">Projects</a></li>
|
| 660 |
+
<li><a href="#contact" class="text-slate-400 hover:text-white transition-colors">Contact</a></li>
|
| 661 |
+
</ul>
|
| 662 |
+
</div>
|
| 663 |
+
|
| 664 |
+
<div>
|
| 665 |
+
<h4 class="font-bold mb-4">Services</h4>
|
| 666 |
+
<ul class="space-y-2">
|
| 667 |
+
<li><a href="#" class="text-slate-400 hover:text-white transition-colors">Web Development</a></li>
|
| 668 |
+
<li><a href="#" class="text-slate-400 hover:text-white transition-colors">App Development</a></li>
|
| 669 |
+
<li><a href="#" class="text-slate-400 hover:text-white transition-colors">UI/UX Design</a></li>
|
| 670 |
+
<li><a href="#" class="text-slate-400 hover:text-white transition-colors">Consulting</a></li>
|
| 671 |
+
</ul>
|
| 672 |
+
</div>
|
| 673 |
+
|
| 674 |
+
<div>
|
| 675 |
+
<h4 class="font-bold mb-4">Connect</h4>
|
| 676 |
+
<div class="flex space-x-4">
|
| 677 |
+
<a href="#" class="w-10 h-10 rounded-full bg-dark-700 flex items-center justify-center text-slate-300 hover:bg-primary-500 hover:text-white transition-colors duration-300">
|
| 678 |
+
<i class="fab fa-github"></i>
|
| 679 |
+
</a>
|
| 680 |
+
<a href="#" class="w-10 h-10 rounded-full bg-dark-700 flex items-center justify-center text-slate-300 hover:bg-blue-500 hover:text-white transition-colors duration-300">
|
| 681 |
+
<i class="fab fa-linkedin-in"></i>
|
| 682 |
+
</a>
|
| 683 |
+
<a href="#" class="w-10 h-10 rounded-full bg-dark-700 flex items-center justify-center text-slate-300 hover:bg-blue-400 hover:text-white transition-colors duration-300">
|
| 684 |
+
<i class="fab fa-twitter"></i>
|
| 685 |
+
</a>
|
| 686 |
+
<a href="#" class="w-10 h-10 rounded-full bg-dark-700 flex items-center justify-center text-slate-300 hover:bg-pink-500 hover:text-white transition-colors duration-300">
|
| 687 |
+
<i class="fab fa-dribbble"></i>
|
| 688 |
+
</a>
|
| 689 |
+
</div>
|
| 690 |
+
</div>
|
| 691 |
+
</div>
|
| 692 |
+
</div>
|
| 693 |
+
</div>
|
| 694 |
+
</footer>
|
| 695 |
+
|
| 696 |
+
<script>
|
| 697 |
+
// Mobile Menu Toggle
|
| 698 |
+
const mobileMenuButton = document.getElementById('mobile-menu-button');
|
| 699 |
+
const mobileMenu = document.getElementById('mobile-menu');
|
| 700 |
+
|
| 701 |
+
mobileMenuButton.addEventListener('click', () => {
|
| 702 |
+
mobileMenu.classList.toggle('hidden');
|
| 703 |
+
});
|
| 704 |
+
|
| 705 |
+
// Close mobile menu when clicking a link
|
| 706 |
+
document.querySelectorAll('#mobile-menu a').forEach(link => {
|
| 707 |
+
link.addEventListener('click', () => {
|
| 708 |
+
mobileMenu.classList.add('hidden');
|
| 709 |
+
});
|
| 710 |
+
});
|
| 711 |
+
|
| 712 |
+
// Dark Mode Toggle
|
| 713 |
+
const themeToggle = document.getElementById('theme-toggle');
|
| 714 |
+
const html = document.documentElement;
|
| 715 |
+
|
| 716 |
+
// Check for saved user preference, if any, on load of the website
|
| 717 |
+
if (localStorage.getItem('theme') === 'dark' || (!localStorage.getItem('theme') && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
|
| 718 |
+
html.classList.add('dark');
|
| 719 |
+
themeToggle.innerHTML = '<i class="fas fa-sun text-xl text-yellow-300"></i>';
|
| 720 |
+
} else {
|
| 721 |
+
html.classList.remove('dark');
|
| 722 |
+
themeToggle.innerHTML = '<i class="fas fa-moon text-xl text-slate-700"></i>';
|
| 723 |
+
}
|
| 724 |
+
|
| 725 |
+
themeToggle.addEventListener('click', () => {
|
| 726 |
+
if (html.classList.contains('dark')) {
|
| 727 |
+
html.classList.remove('dark');
|
| 728 |
+
localStorage.setItem('theme', 'light');
|
| 729 |
+
themeToggle.innerHTML = '<i class="fas fa-moon text-xl text-slate-700"></i>';
|
| 730 |
+
} else {
|
| 731 |
+
html.classList.add('dark');
|
| 732 |
+
localStorage.setItem('theme', 'dark');
|
| 733 |
+
themeToggle.innerHTML = '<i class="fas fa-sun text-xl text-yellow-300"></i>';
|
| 734 |
+
}
|
| 735 |
+
});
|
| 736 |
+
|
| 737 |
+
// Sticky Header on Scroll
|
| 738 |
+
const header = document.getElementById('header');
|
| 739 |
+
|
| 740 |
+
window.addEventListener('scroll', () => {
|
| 741 |
+
if (window.scrollY > 50) {
|
| 742 |
+
header.classList.add('bg-white', 'dark:bg-dark-800', 'shadow-md');
|
| 743 |
+
} else {
|
| 744 |
+
header.classList.remove('bg-white', 'dark:bg-dark-800', 'shadow-md');
|
| 745 |
+
}
|
| 746 |
+
});
|
| 747 |
+
|
| 748 |
+
// Typing Effect
|
| 749 |
+
const typingText = document.getElementById('typing-text');
|
| 750 |
+
const professions = ['Web Developer', 'UI/UX Designer', 'Frontend Engineer', 'JavaScript Expert'];
|
| 751 |
+
let professionIndex = 0;
|
| 752 |
+
let charIndex = 0;
|
| 753 |
+
let isDeleting = false;
|
| 754 |
+
let typingSpeed = 100;
|
| 755 |
+
|
| 756 |
+
function type() {
|
| 757 |
+
const currentProfession = professions[professionIndex];
|
| 758 |
+
|
| 759 |
+
if (isDeleting) {
|
| 760 |
+
typingText.textContent = currentProfession.substring(0, charIndex - 1);
|
| 761 |
+
charIndex--;
|
| 762 |
+
typingSpeed = 50;
|
| 763 |
+
} else {
|
| 764 |
+
typingText.textContent = currentProfession.substring(0, charIndex + 1);
|
| 765 |
+
charIndex++;
|
| 766 |
+
typingSpeed = 100;
|
| 767 |
+
}
|
| 768 |
+
|
| 769 |
+
if (!isDeleting && charIndex === currentProfession.length) {
|
| 770 |
+
isDeleting = true;
|
| 771 |
+
typingSpeed = 1500; // Pause at end
|
| 772 |
+
} else if (isDeleting && charIndex === 0) {
|
| 773 |
+
isDeleting = false;
|
| 774 |
+
professionIndex = (professionIndex + 1) % professions.length;
|
| 775 |
+
typingSpeed = 500; // Pause before typing next
|
| 776 |
+
}
|
| 777 |
+
|
| 778 |
+
setTimeout(type, typingSpeed);
|
| 779 |
+
}
|
| 780 |
+
|
| 781 |
+
// Start typing effect after a delay
|
| 782 |
+
setTimeout(type, 1000);
|
| 783 |
+
|
| 784 |
+
// Animate skill bars on scroll
|
| 785 |
+
function animateSkillBars() {
|
| 786 |
+
const skillBars = document.querySelectorAll('.skill-progress');
|
| 787 |
+
|
| 788 |
+
skillBars.forEach(bar => {
|
| 789 |
+
const width = bar.style.width;
|
| 790 |
+
bar.style.width = '0';
|
| 791 |
+
|
| 792 |
+
setTimeout(() => {
|
| 793 |
+
bar.style.width = width;
|
| 794 |
+
}, 100);
|
| 795 |
+
});
|
| 796 |
+
}
|
| 797 |
+
|
| 798 |
+
// Intersection Observer for scroll animations
|
| 799 |
+
const observerOptions = {
|
| 800 |
+
threshold: 0.1
|
| 801 |
+
};
|
| 802 |
+
|
| 803 |
+
const observer = new IntersectionObserver((entries) => {
|
| 804 |
+
entries.forEach(entry => {
|
| 805 |
+
if (entry.isIntersecting) {
|
| 806 |
+
entry.target.classList.add('animate-fade-in');
|
| 807 |
+
|
| 808 |
+
if (entry.target.id === 'skills') {
|
| 809 |
+
animateSkillBars();
|
| 810 |
+
}
|
| 811 |
+
|
| 812 |
+
observer.unobserve(entry.target);
|
| 813 |
+
}
|
| 814 |
+
});
|
| 815 |
+
}, observerOptions);
|
| 816 |
+
|
| 817 |
+
// Observe all sections
|
| 818 |
+
document.querySelectorAll('section').forEach(section => {
|
| 819 |
+
observer.observe(section);
|
| 820 |
+
});
|
| 821 |
+
|
| 822 |
+
// Smooth scrolling for anchor links
|
| 823 |
+
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
| 824 |
+
anchor.addEventListener('click', function(e) {
|
| 825 |
+
e.preventDefault();
|
| 826 |
+
|
| 827 |
+
const targetId = this.getAttribute('href');
|
| 828 |
+
if (targetId === '#') return;
|
| 829 |
+
|
| 830 |
+
const targetElement = document.querySelector(targetId);
|
| 831 |
+
if (targetElement) {
|
| 832 |
+
window.scrollTo({
|
| 833 |
+
top: targetElement.offsetTop - 80,
|
| 834 |
+
behavior: 'smooth'
|
| 835 |
+
});
|
| 836 |
+
}
|
| 837 |
+
});
|
| 838 |
+
});
|
| 839 |
+
</script>
|
| 840 |
+
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=mastermind-creat/latest-portfolio" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body>
|
| 841 |
+
</html>
|