Spaces:
Running
Build a highly advanced, modern, and content-rich multilingual website for a programming and AI innovation group called “SuperNova”.
Browse files🧠 Core Requirements:
Framework: React (Next.js preferred)
Languages: English, German, Persian with a language switcher (flag icons + dropdown).
Design: Futuristic, dark theme, neon gradients, glassmorphism, and smooth motion animations (Framer Motion / GSAP).
Fully responsive (desktop, tablet, mobile).
SEO optimized, fast, and accessible.
Include light/dark mode toggle.
📄 Pages to Include:
Home Page
Futuristic hero section with animated background (e.g., particles, glowing nebula).
Tagline: “Expanding the Boundaries of Code.”
Call-to-action buttons: “Explore Services” / “Join Us”.
3D scroll animations and parallax layers.
About Us
Interactive timeline describing SuperNova’s evolution.
Animated cards for team members (photo, name, skills, social links).
Mission and vision presented in a futuristic style.
Services
Full-stack development, AI/ML solutions, cloud infrastructure, UI/UX design.
Each service as an interactive glowing card with hover animations.
Include category filter and icons for technologies (Python, React, TensorFlow, etc.).
Courses
Online/offline tech courses: Python, JavaScript, AI, Web Dev.
Include filter/search system, multi-language descriptions, and animated enroll buttons.
Projects / Portfolio
Showcase featured projects with animated previews, tags, and 3D tilt hover.
Optional video previews of apps and dashboards.
Blog
Tech tutorials, AI insights, and programming tips.
SEO metadata and structured article layout.
Contact / Join Us
Futuristic glowing contact form with smooth input animations.
Include social media links and map section (optional).
🎨 Design & Visual Style:
Color Palette: Dark background with purple-blue-pink neon glow accents.
Effects: Glassmorphism, 3D parallax, soft glowing edges, and animated logo.
Typography: Futuristic sans-serif fonts (e.g., Orbitron, Exo 2, or Inter).
Motion: Subtle hover transitions and scroll-based animations.
💡 Advanced Features:
Animated SuperNova logo that pulses with light.
AI-powered chatbot assistant on the bottom right corner.
Testimonials carousel with auto-play and smooth fade transitions.
Dynamic content loading and CMS support (Sanity, Strapi, or MDX).
Performance optimization (image lazy-loading, prefetch, code splitting).
🚀 Overall Tone:
The site should feel visionary, futuristic, and professional — a digital experience that represents SuperNova as a next-generation coding and AI powerhouse.
Every element must express precision, innovation, and mastery in technology.
Output: Fully structured React or Next.js codebase with clean folder structure, Tailwind CSS styling, and English default content (ready for translation).
- README.md +8 -5
- components/course-filter.js +140 -0
- components/glowing-button.js +76 -0
- components/language-switcher.js +118 -0
- components/navbar.js +149 -0
- components/particles-bg.js +100 -0
- components/services.js +175 -0
- components/timeline.js +188 -0
- index.html +146 -19
- script.js +206 -0
- style.css +87 -19
|
@@ -1,10 +1,13 @@
|
|
| 1 |
---
|
| 2 |
-
title:
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
|
|
|
|
|
|
| 8 |
---
|
| 9 |
|
| 10 |
-
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
title: QuantumNeon DevHub ⚡🚀
|
| 3 |
+
colorFrom: red
|
| 4 |
+
colorTo: green
|
| 5 |
+
emoji: 🐳
|
| 6 |
sdk: static
|
| 7 |
pinned: false
|
| 8 |
+
tags:
|
| 9 |
+
- deepsite-v3
|
| 10 |
---
|
| 11 |
|
| 12 |
+
# Welcome to your new DeepSite project!
|
| 13 |
+
This project was created with [DeepSite](https://huggingface.co/deepsite).
|
|
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CourseFilter extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
.filter-controls {
|
| 7 |
+
display: flex;
|
| 8 |
+
flex-wrap: wrap;
|
| 9 |
+
gap: 0.75rem;
|
| 10 |
+
margin-bottom: 2rem;
|
| 11 |
+
justify-content: center;
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
.filter-btn {
|
| 15 |
+
padding: 0.5rem 1.25rem;
|
| 16 |
+
border-radius: 9999px;
|
| 17 |
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
| 18 |
+
background: transparent;
|
| 19 |
+
color: rgba(255, 255, 255, 0.8);
|
| 20 |
+
cursor: pointer;
|
| 21 |
+
transition: all 0.3s ease;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
.filter-btn:hover, .filter-btn.active {
|
| 25 |
+
background: linear-gradient(90deg, #4f46e5, #ec4899);
|
| 26 |
+
color: white;
|
| 27 |
+
border-color: transparent;
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
.courses-grid {
|
| 31 |
+
display: grid;
|
| 32 |
+
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
| 33 |
+
gap: 1.5rem;
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
.course-card {
|
| 37 |
+
background: rgba(30, 41, 59, 0.7);
|
| 38 |
+
border-radius: 16px;
|
| 39 |
+
overflow: hidden;
|
| 40 |
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
| 41 |
+
transition: all 0.3s ease;
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
.course-card:hover {
|
| 45 |
+
transform: translateY(-5px);
|
| 46 |
+
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
.course-image {
|
| 50 |
+
width: 100%;
|
| 51 |
+
height: 160px;
|
| 52 |
+
object-fit: cover;
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
.course-content {
|
| 56 |
+
padding: 1.5rem;
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
.course-category {
|
| 60 |
+
display: inline-block;
|
| 61 |
+
padding: 0.25rem 0.75rem;
|
| 62 |
+
border-radius: 9999px;
|
| 63 |
+
font-size: 0.75rem;
|
| 64 |
+
font-weight: 600;
|
| 65 |
+
margin-bottom: 0.75rem;
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
.web-dev {
|
| 69 |
+
background: rgba(79, 70, 229, 0.2);
|
| 70 |
+
color: #4f46e5;
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
.ai {
|
| 74 |
+
background: rgba(236, 72, 153, 0.2);
|
| 75 |
+
color: #ec4899;
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
.python {
|
| 79 |
+
background: rgba(16, 185, 129, 0.2);
|
| 80 |
+
color: #10b981;
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
.mobile {
|
| 84 |
+
background: rgba(245, 158, 11, 0.2);
|
| 85 |
+
color: #f59e0b;
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
.course-title {
|
| 89 |
+
font-size: 1.125rem;
|
| 90 |
+
font-weight: 600;
|
| 91 |
+
margin-bottom: 0.5rem;
|
| 92 |
+
color: white;
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
.course-desc {
|
| 96 |
+
color: rgba(255, 255, 255, 0.7);
|
| 97 |
+
font-size: 0.875rem;
|
| 98 |
+
margin-bottom: 1rem;
|
| 99 |
+
line-height: 1.5;
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
.course-footer {
|
| 103 |
+
display: flex;
|
| 104 |
+
justify-content: space-between;
|
| 105 |
+
align-items: center;
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
.course-price {
|
| 109 |
+
font-weight: 700;
|
| 110 |
+
color: white;
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
.course-duration {
|
| 114 |
+
display: flex;
|
| 115 |
+
align-items: center;
|
| 116 |
+
gap: 0.25rem;
|
| 117 |
+
font-size: 0.875rem;
|
| 118 |
+
color: rgba(255, 255, 255, 0.7);
|
| 119 |
+
}
|
| 120 |
+
|
| 121 |
+
.course-duration i {
|
| 122 |
+
width: 14px;
|
| 123 |
+
height: 14px;
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
.no-courses {
|
| 127 |
+
grid-column: 1 / -1;
|
| 128 |
+
text-align: center;
|
| 129 |
+
padding: 2rem;
|
| 130 |
+
color: rgba(255, 255, 255, 0.7);
|
| 131 |
+
}
|
| 132 |
+
</style>
|
| 133 |
+
|
| 134 |
+
<div class="filter-controls">
|
| 135 |
+
<button class="filter-btn active" data-filter="all">All Courses</button>
|
| 136 |
+
<button class="filter-btn" data-filter="web">Web Development</button>
|
| 137 |
+
<button class="filter-btn" data-filter="ai">AI & Machine Learning</button>
|
| 138 |
+
<button class="filter-btn" data-filter="python">Python</button>
|
| 139 |
+
<button class="filter-btn" data-filter="mobile">Mobile Development</button>
|
| 140 |
+
</
|
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class GlowingButton extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
const text = this.getAttribute('text') || 'Button';
|
| 4 |
+
const href = this.getAttribute('href') || '#';
|
| 5 |
+
const size = this.getAttribute('size') || 'md';
|
| 6 |
+
|
| 7 |
+
const sizes = {
|
| 8 |
+
sm: 'px-4 py-2 text-sm',
|
| 9 |
+
md: 'px-6 py-3 text-base',
|
| 10 |
+
lg: 'px-8 py-4 text-lg'
|
| 11 |
+
};
|
| 12 |
+
|
| 13 |
+
this.attachShadow({ mode: 'open' });
|
| 14 |
+
this.shadowRoot.innerHTML = `
|
| 15 |
+
<style>
|
| 16 |
+
.glow-btn {
|
| 17 |
+
position: relative;
|
| 18 |
+
display: inline-flex;
|
| 19 |
+
align-items: center;
|
| 20 |
+
justify-content: center;
|
| 21 |
+
font-weight: 600;
|
| 22 |
+
border-radius: 9999px;
|
| 23 |
+
overflow: hidden;
|
| 24 |
+
transition: all 0.3s ease;
|
| 25 |
+
z-index: 1;
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
.glow-btn::before {
|
| 29 |
+
content: '';
|
| 30 |
+
position: absolute;
|
| 31 |
+
top: 0;
|
| 32 |
+
left: 0;
|
| 33 |
+
right: 0;
|
| 34 |
+
bottom: 0;
|
| 35 |
+
background: linear-gradient(135deg, #4f46e5, #ec4899);
|
| 36 |
+
z-index: -1;
|
| 37 |
+
opacity: 1;
|
| 38 |
+
transition: opacity 0.3s ease;
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
.glow-btn::after {
|
| 42 |
+
content: '';
|
| 43 |
+
position: absolute;
|
| 44 |
+
top: -2px;
|
| 45 |
+
left: -2px;
|
| 46 |
+
right: -2px;
|
| 47 |
+
bottom: -2px;
|
| 48 |
+
background: linear-gradient(135deg, #4f46e5, #ec4899);
|
| 49 |
+
z-index: -2;
|
| 50 |
+
filter: blur(10px);
|
| 51 |
+
opacity: 0;
|
| 52 |
+
transition: opacity 0.3s ease;
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
.glow-btn:hover::after {
|
| 56 |
+
opacity: 0.8;
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
.glow-btn:hover {
|
| 60 |
+
transform: translateY(-2px);
|
| 61 |
+
box-shadow: 0 10px 20px -5px rgba(79, 70, 229, 0.4);
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
.glow-btn:active {
|
| 65 |
+
transform: translateY(0);
|
| 66 |
+
}
|
| 67 |
+
</style>
|
| 68 |
+
|
| 69 |
+
<a href="${href}" class="glow-btn ${sizes[size]} text-white">
|
| 70 |
+
${text}
|
| 71 |
+
</a>
|
| 72 |
+
`;
|
| 73 |
+
}
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
customElements.define('glowing-button', GlowingButton);
|
|
@@ -0,0 +1,118 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class LanguageSwitcher extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: inline-block;
|
| 8 |
+
position: relative;
|
| 9 |
+
}
|
| 10 |
+
|
| 11 |
+
.language-btn {
|
| 12 |
+
display: flex;
|
| 13 |
+
align-items: center;
|
| 14 |
+
gap: 0.5rem;
|
| 15 |
+
background: rgba(255, 255, 255, 0.1);
|
| 16 |
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
| 17 |
+
border-radius: 9999px;
|
| 18 |
+
padding: 0.5rem 1rem;
|
| 19 |
+
color: white;
|
| 20 |
+
cursor: pointer;
|
| 21 |
+
transition: all 0.3s ease;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
.language-btn:hover {
|
| 25 |
+
background: rgba(255, 255, 255, 0.2);
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
.dropdown {
|
| 29 |
+
position: absolute;
|
| 30 |
+
right: 0;
|
| 31 |
+
top: calc(100% + 0.5rem);
|
| 32 |
+
background: rgba(30, 41, 59, 0.95);
|
| 33 |
+
border-radius: 0.75rem;
|
| 34 |
+
padding: 0.5rem 0;
|
| 35 |
+
min-width: 160px;
|
| 36 |
+
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
| 37 |
+
backdrop-filter: blur(16px);
|
| 38 |
+
-webkit-backdrop-filter: blur(16px);
|
| 39 |
+
opacity: 0;
|
| 40 |
+
visibility: hidden;
|
| 41 |
+
transform: translateY(10px);
|
| 42 |
+
transition: all 0.3s ease;
|
| 43 |
+
z-index: 100;
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
:host([open]) .dropdown {
|
| 47 |
+
opacity: 1;
|
| 48 |
+
visibility: visible;
|
| 49 |
+
transform: translateY(0);
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
.language-option {
|
| 53 |
+
display: flex;
|
| 54 |
+
align-items: center;
|
| 55 |
+
gap: 0.75rem;
|
| 56 |
+
padding: 0.75rem 1.5rem;
|
| 57 |
+
color: rgba(255, 255, 255, 0.8);
|
| 58 |
+
cursor: pointer;
|
| 59 |
+
transition: all 0.2s ease;
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
.language-option:hover {
|
| 63 |
+
background: rgba(79, 70, 229, 0.2);
|
| 64 |
+
color: white;
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
.language-flag {
|
| 68 |
+
width: 20px;
|
| 69 |
+
height: 20px;
|
| 70 |
+
border-radius: 50%;
|
| 71 |
+
object-fit: cover;
|
| 72 |
+
}
|
| 73 |
+
</style>
|
| 74 |
+
|
| 75 |
+
<div class="language-btn" id="toggleBtn">
|
| 76 |
+
<img src="/flags/${this.getAttribute('current')}.svg" class="language-flag" alt="Current language">
|
| 77 |
+
<span>${this.getAttribute('current').toUpperCase()}</span>
|
| 78 |
+
<i data-feather="chevron-down" width="16" height="16"></i>
|
| 79 |
+
</div>
|
| 80 |
+
|
| 81 |
+
<div class="dropdown">
|
| 82 |
+
<div class="language-option" data-lang="en">
|
| 83 |
+
<img src="/flags/en.svg" class="language-flag" alt="English">
|
| 84 |
+
<span>English</span>
|
| 85 |
+
</div>
|
| 86 |
+
<div class="language-option" data-lang="de">
|
| 87 |
+
<img src="/flags/de.svg" class="language-flag" alt="Deutsch">
|
| 88 |
+
<span>Deutsch</span>
|
| 89 |
+
</div>
|
| 90 |
+
<div class="language-option" data-lang="fa">
|
| 91 |
+
<img src="/flags/fa.svg" class="language-flag" alt="فارسی">
|
| 92 |
+
<span>فارسی</span>
|
| 93 |
+
</div>
|
| 94 |
+
</div>
|
| 95 |
+
`;
|
| 96 |
+
|
| 97 |
+
const toggleBtn = this.shadowRoot.getElementById('toggleBtn');
|
| 98 |
+
toggleBtn.addEventListener('click', () => {
|
| 99 |
+
this.toggleAttribute('open');
|
| 100 |
+
});
|
| 101 |
+
|
| 102 |
+
const options = this.shadowRoot.querySelectorAll('.language-option');
|
| 103 |
+
options.forEach(option => {
|
| 104 |
+
option.addEventListener('click', () => {
|
| 105 |
+
const lang = option.getAttribute('data-lang');
|
| 106 |
+
this.setAttribute('current', lang);
|
| 107 |
+
this.removeAttribute('open');
|
| 108 |
+
this.dispatchEvent(new CustomEvent('language-change', {
|
| 109 |
+
detail: { language: lang },
|
| 110 |
+
bubbles: true,
|
| 111 |
+
composed: true
|
| 112 |
+
}));
|
| 113 |
+
});
|
| 114 |
+
});
|
| 115 |
+
}
|
| 116 |
+
}
|
| 117 |
+
|
| 118 |
+
customElements.define('language-switcher', LanguageSwitcher);
|
|
@@ -0,0 +1,149 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomNavbar extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
position: fixed;
|
| 9 |
+
width: 100%;
|
| 10 |
+
top: 0;
|
| 11 |
+
left: 0;
|
| 12 |
+
z-index: 1000;
|
| 13 |
+
backdrop-filter: blur(16px) saturate(180%);
|
| 14 |
+
-webkit-backdrop-filter: blur(16px) saturate(180%);
|
| 15 |
+
background-color: rgba(15, 23, 42, 0.75);
|
| 16 |
+
border-bottom: 1px solid rgba(255, 255, 255, 0.125);
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
nav {
|
| 20 |
+
max-width: 1200px;
|
| 21 |
+
margin: 0 auto;
|
| 22 |
+
padding: 1rem 2rem;
|
| 23 |
+
display: flex;
|
| 24 |
+
justify-content: space-between;
|
| 25 |
+
align-items: center;
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
.logo {
|
| 29 |
+
display: flex;
|
| 30 |
+
align-items: center;
|
| 31 |
+
gap: 0.5rem;
|
| 32 |
+
font-weight: 700;
|
| 33 |
+
font-size: 1.25rem;
|
| 34 |
+
color: white;
|
| 35 |
+
text-decoration: none;
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
.logo-icon {
|
| 39 |
+
color: #4f46e5;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
.nav-links {
|
| 43 |
+
display: flex;
|
| 44 |
+
gap: 2rem;
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
.nav-links a {
|
| 48 |
+
color: rgba(255, 255, 255, 0.8);
|
| 49 |
+
text-decoration: none;
|
| 50 |
+
font-weight: 500;
|
| 51 |
+
transition: all 0.3s ease;
|
| 52 |
+
position: relative;
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
.nav-links a:hover {
|
| 56 |
+
color: white;
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
.nav-links a::after {
|
| 60 |
+
content: '';
|
| 61 |
+
position: absolute;
|
| 62 |
+
bottom: -2px;
|
| 63 |
+
left: 0;
|
| 64 |
+
width: 0;
|
| 65 |
+
height: 2px;
|
| 66 |
+
background: linear-gradient(90deg, #4f46e5, #ec4899);
|
| 67 |
+
transition: width 0.3s ease;
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
.nav-links a:hover::after {
|
| 71 |
+
width: 100%;
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
.nav-actions {
|
| 75 |
+
display: flex;
|
| 76 |
+
align-items: center;
|
| 77 |
+
gap: 1rem;
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
.language-selector {
|
| 81 |
+
background: transparent;
|
| 82 |
+
color: white;
|
| 83 |
+
border: 1px solid rgba(255, 255, 255, 0.2);
|
| 84 |
+
padding: 0.25rem 0.5rem;
|
| 85 |
+
border-radius: 4px;
|
| 86 |
+
cursor: pointer;
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
.theme-toggle {
|
| 90 |
+
background: transparent;
|
| 91 |
+
color: white;
|
| 92 |
+
border: none;
|
| 93 |
+
cursor: pointer;
|
| 94 |
+
padding: 0.25rem;
|
| 95 |
+
border-radius: 50%;
|
| 96 |
+
display: flex;
|
| 97 |
+
align-items: center;
|
| 98 |
+
justify-content: center;
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
.mobile-menu-btn {
|
| 102 |
+
display: none;
|
| 103 |
+
background: transparent;
|
| 104 |
+
color: white;
|
| 105 |
+
border: none;
|
| 106 |
+
cursor: pointer;
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
@media (max-width: 768px) {
|
| 110 |
+
.nav-links, .nav-actions {
|
| 111 |
+
display: none;
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
.mobile-menu-btn {
|
| 115 |
+
display: block;
|
| 116 |
+
}
|
| 117 |
+
}
|
| 118 |
+
</style>
|
| 119 |
+
|
| 120 |
+
<nav>
|
| 121 |
+
<a href="/" class="logo">
|
| 122 |
+
<i data-feather="codesandbox" class="logo-icon"></i>
|
| 123 |
+
SuperNova
|
| 124 |
+
</a>
|
| 125 |
+
|
| 126 |
+
<div class="nav-links">
|
| 127 |
+
<a href="#about">About</a>
|
| 128 |
+
<a href="#services">Services</a>
|
| 129 |
+
<a href="#courses">Courses</a>
|
| 130 |
+
<a href="#contact">Contact</a>
|
| 131 |
+
</div>
|
| 132 |
+
|
| 133 |
+
<div class="nav-actions">
|
| 134 |
+
<language-switcher current="en"></language-switcher>
|
| 135 |
+
<script src="components/language-switcher.js"></script>
|
| 136 |
+
<button id="darkModeToggle" class="theme-toggle">
|
| 137 |
+
<i data-feather="moon"></i>
|
| 138 |
+
</button>
|
| 139 |
+
</div>
|
| 140 |
+
|
| 141 |
+
<button class="mobile-menu-btn">
|
| 142 |
+
<i data-feather="menu"></i>
|
| 143 |
+
</button>
|
| 144 |
+
</nav>
|
| 145 |
+
`;
|
| 146 |
+
}
|
| 147 |
+
}
|
| 148 |
+
|
| 149 |
+
customElements.define('custom-navbar', CustomNavbar);
|
|
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class ParticlesBackground extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
:host {
|
| 7 |
+
display: block;
|
| 8 |
+
position: absolute;
|
| 9 |
+
top: 0;
|
| 10 |
+
left: 0;
|
| 11 |
+
width: 100%;
|
| 12 |
+
height: 100%;
|
| 13 |
+
z-index: 0;
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
#particles-js {
|
| 17 |
+
width: 100%;
|
| 18 |
+
height: 100%;
|
| 19 |
+
background-color: #0f172a;
|
| 20 |
+
background-image: url("");
|
| 21 |
+
background-repeat: no-repeat;
|
| 22 |
+
background-size: cover;
|
| 23 |
+
background-position: 50% 50%;
|
| 24 |
+
}
|
| 25 |
+
</style>
|
| 26 |
+
|
| 27 |
+
<div id="particles-js"></div>
|
| 28 |
+
`;
|
| 29 |
+
|
| 30 |
+
// Load particles.js dynamically
|
| 31 |
+
const script = document.createElement('script');
|
| 32 |
+
script.src = 'https://cdn.jsdelivr.net/particles.js/2.0.0/particles.min.js';
|
| 33 |
+
script.onload = () => this.initParticles();
|
| 34 |
+
document.head.appendChild(script);
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
initParticles() {
|
| 38 |
+
if (typeof particlesJS !== 'undefined') {
|
| 39 |
+
particlesJS(this.shadowRoot.getElementById('particles-js'), {
|
| 40 |
+
"particles": {
|
| 41 |
+
"number": {
|
| 42 |
+
"value": 80,
|
| 43 |
+
"density": { "enable": true, "value_area": 800 }
|
| 44 |
+
},
|
| 45 |
+
"color": { "value": "#4f46e5" },
|
| 46 |
+
"shape": {
|
| 47 |
+
"type": "circle",
|
| 48 |
+
"stroke": { "width": 0, "color": "#000000" },
|
| 49 |
+
"polygon": { "nb_sides": 5 }
|
| 50 |
+
},
|
| 51 |
+
"opacity": {
|
| 52 |
+
"value": 0.5,
|
| 53 |
+
"random": false,
|
| 54 |
+
"anim": { "enable": false, "speed": 1, "opacity_min": 0.1, "sync": false }
|
| 55 |
+
},
|
| 56 |
+
"size": {
|
| 57 |
+
"value": 3,
|
| 58 |
+
"random": true,
|
| 59 |
+
"anim": { "enable": false, "speed": 40, "size_min": 0.1, "sync": false }
|
| 60 |
+
},
|
| 61 |
+
"line_linked": {
|
| 62 |
+
"enable": true,
|
| 63 |
+
"distance": 150,
|
| 64 |
+
"color": "#4f46e5",
|
| 65 |
+
"opacity": 0.4,
|
| 66 |
+
"width": 1
|
| 67 |
+
},
|
| 68 |
+
"move": {
|
| 69 |
+
"enable": true,
|
| 70 |
+
"speed": 2,
|
| 71 |
+
"direction": "none",
|
| 72 |
+
"random": false,
|
| 73 |
+
"straight": false,
|
| 74 |
+
"out_mode": "out",
|
| 75 |
+
"bounce": false,
|
| 76 |
+
"attract": { "enable": false, "rotateX": 600, "rotateY": 1200 }
|
| 77 |
+
}
|
| 78 |
+
},
|
| 79 |
+
"interactivity": {
|
| 80 |
+
"detect_on": "canvas",
|
| 81 |
+
"events": {
|
| 82 |
+
"onhover": { "enable": true, "mode": "grab" },
|
| 83 |
+
"onclick": { "enable": true, "mode": "push" },
|
| 84 |
+
"resize": true
|
| 85 |
+
},
|
| 86 |
+
"modes": {
|
| 87 |
+
"grab": { "distance": 140, "line_linked": { "opacity": 1 } },
|
| 88 |
+
"bubble": { "distance": 400, "size": 40, "duration": 2, "opacity": 8, "speed": 3 },
|
| 89 |
+
"repulse": { "distance": 200, "duration": 0.4 },
|
| 90 |
+
"push": { "particles_nb": 4 },
|
| 91 |
+
"remove": { "particles_nb": 2 }
|
| 92 |
+
}
|
| 93 |
+
},
|
| 94 |
+
"retina_detect": true
|
| 95 |
+
});
|
| 96 |
+
}
|
| 97 |
+
}
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
customElements.define('particles-bg', ParticlesBackground);
|
|
@@ -0,0 +1,175 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomServices extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
.services-grid {
|
| 7 |
+
display: grid;
|
| 8 |
+
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
| 9 |
+
gap: 2rem;
|
| 10 |
+
margin-top: 3rem;
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
.service-card {
|
| 14 |
+
background: rgba(30, 41, 59, 0.7);
|
| 15 |
+
border-radius: 16px;
|
| 16 |
+
padding: 2rem;
|
| 17 |
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
| 18 |
+
transition: all 0.3s ease;
|
| 19 |
+
position: relative;
|
| 20 |
+
overflow: hidden;
|
| 21 |
+
backdrop-filter: blur(10px);
|
| 22 |
+
-webkit-backdrop-filter: blur(10px);
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
.service-card::before {
|
| 26 |
+
content: '';
|
| 27 |
+
position: absolute;
|
| 28 |
+
top: -2px;
|
| 29 |
+
left: -2px;
|
| 30 |
+
right: -2px;
|
| 31 |
+
bottom: -2px;
|
| 32 |
+
background: linear-gradient(45deg, #4f46e5, #ec4899);
|
| 33 |
+
z-index: -1;
|
| 34 |
+
border-radius: 18px;
|
| 35 |
+
opacity: 0;
|
| 36 |
+
transition: opacity 0.3s ease;
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
.service-card:hover {
|
| 40 |
+
transform: translateY(-10px);
|
| 41 |
+
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
.service-card:hover::before {
|
| 45 |
+
opacity: 1;
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
.service-icon {
|
| 49 |
+
width: 60px;
|
| 50 |
+
height: 60px;
|
| 51 |
+
display: flex;
|
| 52 |
+
align-items: center;
|
| 53 |
+
justify-content: center;
|
| 54 |
+
margin-bottom: 1.5rem;
|
| 55 |
+
border-radius: 12px;
|
| 56 |
+
background: linear-gradient(135deg, rgba(79, 70, 229, 0.2), rgba(236, 72, 153, 0.2));
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
.service-icon i {
|
| 60 |
+
color: #ec4899;
|
| 61 |
+
width: 28px;
|
| 62 |
+
height: 28px;
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
.service-title {
|
| 66 |
+
font-size: 1.25rem;
|
| 67 |
+
font-weight: 600;
|
| 68 |
+
margin-bottom: 1rem;
|
| 69 |
+
color: white;
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
.service-desc {
|
| 73 |
+
color: rgba(255, 255, 255, 0.8);
|
| 74 |
+
margin-bottom: 1.5rem;
|
| 75 |
+
line-height: 1.6;
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
.service-link {
|
| 79 |
+
display: flex;
|
| 80 |
+
align-items: center;
|
| 81 |
+
color: #4f46e5;
|
| 82 |
+
font-weight: 500;
|
| 83 |
+
text-decoration: none;
|
| 84 |
+
transition: color 0.3s ease;
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
.service-link:hover {
|
| 88 |
+
color: #ec4899;
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
.service-link i {
|
| 92 |
+
margin-left: 0.5rem;
|
| 93 |
+
width: 16px;
|
| 94 |
+
height: 16px;
|
| 95 |
+
}
|
| 96 |
+
</style>
|
| 97 |
+
|
| 98 |
+
<div class="services-grid">
|
| 99 |
+
<div class="service-card animate-on-scroll">
|
| 100 |
+
<div class="service-icon">
|
| 101 |
+
<i data-feather="globe"></i>
|
| 102 |
+
</div>
|
| 103 |
+
<h3 class="service-title">Web Development</h3>
|
| 104 |
+
<p class="service-desc">Building high-performance, scalable web applications with modern technologies like React, Next.js, and Node.js.</p>
|
| 105 |
+
<a href="#" class="service-link">
|
| 106 |
+
Learn more
|
| 107 |
+
<i data-feather="arrow-right"></i>
|
| 108 |
+
</a>
|
| 109 |
+
</div>
|
| 110 |
+
|
| 111 |
+
<div class="service-card animate-on-scroll">
|
| 112 |
+
<div class="service-icon">
|
| 113 |
+
<i data-feather="smartphone"></i>
|
| 114 |
+
</div>
|
| 115 |
+
<h3 class="service-title">Mobile Development</h3>
|
| 116 |
+
<p class="service-desc">Creating beautiful, native-feeling mobile apps for iOS and Android using React Native and Flutter.</p>
|
| 117 |
+
<a href="#" class="service-link">
|
| 118 |
+
Learn more
|
| 119 |
+
<i data-feather="arrow-right"></i>
|
| 120 |
+
</a>
|
| 121 |
+
</div>
|
| 122 |
+
|
| 123 |
+
<div class="service-card animate-on-scroll">
|
| 124 |
+
<div class="service-icon">
|
| 125 |
+
<i data-feather="cpu"></i>
|
| 126 |
+
</div>
|
| 127 |
+
<h3 class="service-title">AI Solutions</h3>
|
| 128 |
+
<p class="service-desc">Leveraging machine learning and artificial intelligence to solve complex business problems and automate processes.</p>
|
| 129 |
+
<a href="#" class="service-link">
|
| 130 |
+
Learn more
|
| 131 |
+
<i data-feather="arrow-right"></i>
|
| 132 |
+
</a>
|
| 133 |
+
</div>
|
| 134 |
+
|
| 135 |
+
<div class="service-card animate-on-scroll">
|
| 136 |
+
<div class="service-icon">
|
| 137 |
+
<i data-feather="cloud"></i>
|
| 138 |
+
</div>
|
| 139 |
+
<h3 class="service-title">Cloud Architecture</h3>
|
| 140 |
+
<p class="service-desc">Designing and implementing scalable cloud infrastructure on AWS, Google Cloud, and Azure platforms.</p>
|
| 141 |
+
<a href="#" class="service-link">
|
| 142 |
+
Learn more
|
| 143 |
+
<i data-feather="arrow-right"></i>
|
| 144 |
+
</a>
|
| 145 |
+
</div>
|
| 146 |
+
|
| 147 |
+
<div class="service-card animate-on-scroll">
|
| 148 |
+
<div class="service-icon">
|
| 149 |
+
<i data-feather="lock"></i>
|
| 150 |
+
</div>
|
| 151 |
+
<h3 class="service-title">Cybersecurity</h3>
|
| 152 |
+
<p class="service-desc">Protecting your digital assets with comprehensive security assessments, penetration testing, and robust security solutions.</p>
|
| 153 |
+
<a href="#" class="service-link">
|
| 154 |
+
Learn more
|
| 155 |
+
<i data-feather="arrow-right"></i>
|
| 156 |
+
</a>
|
| 157 |
+
</div>
|
| 158 |
+
|
| 159 |
+
<div class="service-card animate-on-scroll">
|
| 160 |
+
<div class="service-icon">
|
| 161 |
+
<i data-feather="bar-chart-2"></i>
|
| 162 |
+
</div>
|
| 163 |
+
<h3 class="service-title">Data Analytics</h3>
|
| 164 |
+
<p class="service-desc">Transforming raw data into actionable insights with powerful analytics tools and custom dashboard solutions.</p>
|
| 165 |
+
<a href="#" class="service-link">
|
| 166 |
+
Learn more
|
| 167 |
+
<i data-feather="arrow-right"></i>
|
| 168 |
+
</a>
|
| 169 |
+
</div>
|
| 170 |
+
</div>
|
| 171 |
+
`;
|
| 172 |
+
}
|
| 173 |
+
}
|
| 174 |
+
|
| 175 |
+
customElements.define('custom-services', CustomServices);
|
|
@@ -0,0 +1,188 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
class CustomTimeline extends HTMLElement {
|
| 2 |
+
connectedCallback() {
|
| 3 |
+
this.attachShadow({ mode: 'open' });
|
| 4 |
+
this.shadowRoot.innerHTML = `
|
| 5 |
+
<style>
|
| 6 |
+
.timeline {
|
| 7 |
+
position: relative;
|
| 8 |
+
max-width: 1200px;
|
| 9 |
+
margin: 0 auto;
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
.timeline::after {
|
| 13 |
+
content: '';
|
| 14 |
+
position: absolute;
|
| 15 |
+
width: 4px;
|
| 16 |
+
background: linear-gradient(to bottom, #4f46e5, #ec4899);
|
| 17 |
+
top: 0;
|
| 18 |
+
bottom: 0;
|
| 19 |
+
left: 50%;
|
| 20 |
+
margin-left: -2px;
|
| 21 |
+
border-radius: 4px;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
.timeline-item {
|
| 25 |
+
padding: 10px 40px;
|
| 26 |
+
position: relative;
|
| 27 |
+
width: 50%;
|
| 28 |
+
box-sizing: border-box;
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
.timeline-item::after {
|
| 32 |
+
content: '';
|
| 33 |
+
position: absolute;
|
| 34 |
+
width: 24px;
|
| 35 |
+
height: 24px;
|
| 36 |
+
right: -12px;
|
| 37 |
+
background: linear-gradient(135deg, #4f46e5, #ec4899);
|
| 38 |
+
border: 3px solid #0f172a;
|
| 39 |
+
top: 15px;
|
| 40 |
+
border-radius: 50%;
|
| 41 |
+
z-index: 1;
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
.left {
|
| 45 |
+
left: 0;
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
.right {
|
| 49 |
+
left: 50%;
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
.left::before {
|
| 53 |
+
content: " ";
|
| 54 |
+
height: 0;
|
| 55 |
+
position: absolute;
|
| 56 |
+
top: 22px;
|
| 57 |
+
width: 0;
|
| 58 |
+
z-index: 1;
|
| 59 |
+
right: 30px;
|
| 60 |
+
border: medium solid rgba(255, 255, 255, 0.1);
|
| 61 |
+
border-width: 10px 0 10px 10px;
|
| 62 |
+
border-color: transparent transparent transparent rgba(255, 255, 255, 0.1);
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
.right::before {
|
| 66 |
+
content: " ";
|
| 67 |
+
height: 0;
|
| 68 |
+
position: absolute;
|
| 69 |
+
top: 22px;
|
| 70 |
+
width: 0;
|
| 71 |
+
z-index: 1;
|
| 72 |
+
left: 30px;
|
| 73 |
+
border: medium solid rgba(255, 255, 255, 0.1);
|
| 74 |
+
border-width: 10px 10px 10px 0;
|
| 75 |
+
border-color: transparent rgba(255, 255, 255, 0.1) transparent transparent;
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
.right::after {
|
| 79 |
+
left: -12px;
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
.timeline-content {
|
| 83 |
+
padding: 20px 30px;
|
| 84 |
+
background: rgba(30, 41, 59, 0.7);
|
| 85 |
+
border-radius: 12px;
|
| 86 |
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
| 87 |
+
backdrop-filter: blur(10px);
|
| 88 |
+
-webkit-backdrop-filter: blur(10px);
|
| 89 |
+
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
.timeline-content:hover {
|
| 93 |
+
transform: translateY(-5px);
|
| 94 |
+
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.2);
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
.timeline-date {
|
| 98 |
+
color: #ec4899;
|
| 99 |
+
font-weight: 600;
|
| 100 |
+
margin-bottom: 8px;
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
.timeline-title {
|
| 104 |
+
font-size: 1.25rem;
|
| 105 |
+
font-weight: 600;
|
| 106 |
+
margin-bottom: 8px;
|
| 107 |
+
color: white;
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
.timeline-desc {
|
| 111 |
+
color: rgba(255, 255, 255, 0.8);
|
| 112 |
+
line-height: 1.6;
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
@media screen and (max-width: 768px) {
|
| 116 |
+
.timeline::after {
|
| 117 |
+
left: 31px;
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
.timeline-item {
|
| 121 |
+
width: 100%;
|
| 122 |
+
padding-left: 70px;
|
| 123 |
+
padding-right: 25px;
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
.timeline-item::before {
|
| 127 |
+
left: 60px;
|
| 128 |
+
border: medium solid rgba(255, 255, 255, 0.1);
|
| 129 |
+
border-width: 10px 10px 10px 0;
|
| 130 |
+
border-color: transparent rgba(255, 255, 255, 0.1) transparent transparent;
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
.left::after, .right::after {
|
| 134 |
+
left: 19px;
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
.right {
|
| 138 |
+
left: 0%;
|
| 139 |
+
}
|
| 140 |
+
}
|
| 141 |
+
</style>
|
| 142 |
+
|
| 143 |
+
<div class="timeline">
|
| 144 |
+
<div class="timeline-item left animate-on-scroll">
|
| 145 |
+
<div class="timeline-content">
|
| 146 |
+
<div class="timeline-date">2015</div>
|
| 147 |
+
<h3 class="timeline-title">Foundation</h3>
|
| 148 |
+
<p class="timeline-desc">SuperNova was founded by a group of passionate developers with a vision to push the boundaries of technology and create innovative solutions.</p>
|
| 149 |
+
</div>
|
| 150 |
+
</div>
|
| 151 |
+
|
| 152 |
+
<div class="timeline-item right animate-on-scroll">
|
| 153 |
+
<div class="timeline-content">
|
| 154 |
+
<div class="timeline-date">2017</div>
|
| 155 |
+
<h3 class="timeline-title">First Major Project</h3>
|
| 156 |
+
<p class="timeline-desc">Developed a groundbreaking AI solution for a Fortune 500 company, establishing our reputation in the industry.</p>
|
| 157 |
+
</div>
|
| 158 |
+
</div>
|
| 159 |
+
|
| 160 |
+
<div class="timeline-item left animate-on-scroll">
|
| 161 |
+
<div class="timeline-content">
|
| 162 |
+
<div class="timeline-date">2019</div>
|
| 163 |
+
<h3 class="timeline-title">Global Expansion</h3>
|
| 164 |
+
<p class="timeline-desc">Opened offices in three new countries and grew our team to over 50 world-class developers and engineers.</p>
|
| 165 |
+
</div>
|
| 166 |
+
</div>
|
| 167 |
+
|
| 168 |
+
<div class="timeline-item right animate-on-scroll">
|
| 169 |
+
<div class="timeline-content">
|
| 170 |
+
<div class="timeline-date">2021</div>
|
| 171 |
+
<h3 class="timeline-title">Education Initiative</h3>
|
| 172 |
+
<p class="timeline-desc">Launched our coding education platform to train the next generation of developers with cutting-edge courses.</p>
|
| 173 |
+
</div>
|
| 174 |
+
</div>
|
| 175 |
+
|
| 176 |
+
<div class="timeline-item left animate-on-scroll">
|
| 177 |
+
<div class="timeline-content">
|
| 178 |
+
<div class="timeline-date">2023</div>
|
| 179 |
+
<h3 class="timeline-title">Quantum Computing Division</h3>
|
| 180 |
+
<p class="timeline-desc">Established a new research division focused on quantum computing and its applications in software development.</p>
|
| 181 |
+
</div>
|
| 182 |
+
</div>
|
| 183 |
+
</div>
|
| 184 |
+
`;
|
| 185 |
+
}
|
| 186 |
+
}
|
| 187 |
+
|
| 188 |
+
customElements.define('custom-timeline', CustomTimeline);
|
|
@@ -1,19 +1,146 @@
|
|
| 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="dark">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>SuperNova | Expanding the boundaries of code</title>
|
| 7 |
+
<meta name="description" content="SuperNova - A professional programming and software development group building the future of technology">
|
| 8 |
+
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
| 9 |
+
<script src="https://cdn.tailwindcss.com"></script>
|
| 10 |
+
<script src="https://unpkg.com/feather-icons"></script>
|
| 11 |
+
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
|
| 12 |
+
<link rel="stylesheet" href="style.css">
|
| 13 |
+
<script>
|
| 14 |
+
tailwind.config = {
|
| 15 |
+
darkMode: 'class',
|
| 16 |
+
theme: {
|
| 17 |
+
extend: {
|
| 18 |
+
colors: {
|
| 19 |
+
primary: {
|
| 20 |
+
500: '#4f46e5',
|
| 21 |
+
600: '#4338ca',
|
| 22 |
+
},
|
| 23 |
+
secondary: {
|
| 24 |
+
500: '#ec4899',
|
| 25 |
+
600: '#db2777',
|
| 26 |
+
},
|
| 27 |
+
dark: {
|
| 28 |
+
900: '#0f172a',
|
| 29 |
+
800: '#1e293b',
|
| 30 |
+
700: '#334155',
|
| 31 |
+
}
|
| 32 |
+
},
|
| 33 |
+
animation: {
|
| 34 |
+
'pulse-slow': 'pulse 6s infinite cubic-bezier(0.4, 0, 0.6, 1)',
|
| 35 |
+
'float': 'float 6s ease-in-out infinite',
|
| 36 |
+
},
|
| 37 |
+
keyframes: {
|
| 38 |
+
float: {
|
| 39 |
+
'0%, 100%': { transform: 'translateY(0)' },
|
| 40 |
+
'50%': { transform: 'translateY(-20px)' },
|
| 41 |
+
}
|
| 42 |
+
}
|
| 43 |
+
}
|
| 44 |
+
}
|
| 45 |
+
}
|
| 46 |
+
</script>
|
| 47 |
+
</head>
|
| 48 |
+
<body class="bg-dark-900 text-gray-200 min-h-screen overflow-x-hidden">
|
| 49 |
+
<!-- Navbar Component -->
|
| 50 |
+
<script src="components/navbar.js"></script>
|
| 51 |
+
<custom-navbar></custom-navbar>
|
| 52 |
+
|
| 53 |
+
<!-- Hero Section -->
|
| 54 |
+
<section class="relative h-screen flex items-center justify-center overflow-hidden">
|
| 55 |
+
<particles-bg></particles-bg>
|
| 56 |
+
<script src="components/particles-bg.js"></script>
|
| 57 |
+
<div class="relative z-10 text-center px-4">
|
| 58 |
+
<h1 class="text-5xl md:text-7xl font-bold mb-6 bg-clip-text text-transparent bg-gradient-to-r from-primary-500 to-secondary-500">
|
| 59 |
+
SuperNova
|
| 60 |
+
</h1>
|
| 61 |
+
<p class="text-xl md:text-2xl mb-8 max-w-2xl mx-auto">Expanding the boundaries of code</p>
|
| 62 |
+
<div class="flex gap-4 justify-center">
|
| 63 |
+
<glowing-button href="#services" text="Explore Services" size="lg"></glowing-button>
|
| 64 |
+
<glowing-button href="#contact" text="Contact Us" size="lg" class="ml-4"></glowing-button>
|
| 65 |
+
<script src="components/glowing-button.js"></script>
|
| 66 |
+
</div>
|
| 67 |
+
</div>
|
| 68 |
+
<div class="absolute bottom-10 left-0 right-0 flex justify-center">
|
| 69 |
+
<a href="#about" class="animate-bounce">
|
| 70 |
+
<i data-feather="chevron-down" class="w-8 h-8"></i>
|
| 71 |
+
</a>
|
| 72 |
+
</div>
|
| 73 |
+
</section>
|
| 74 |
+
|
| 75 |
+
<!-- About Section -->
|
| 76 |
+
<section id="about" class="py-20 px-4">
|
| 77 |
+
<div class="max-w-6xl mx-auto">
|
| 78 |
+
<h2 class="text-3xl md:text-4xl font-bold mb-12 text-center">Our Story</h2>
|
| 79 |
+
<div class="relative">
|
| 80 |
+
<!-- Timeline component -->
|
| 81 |
+
<script src="components/timeline.js"></script>
|
| 82 |
+
<custom-timeline></custom-timeline>
|
| 83 |
+
</div>
|
| 84 |
+
</div>
|
| 85 |
+
</section>
|
| 86 |
+
|
| 87 |
+
<!-- Services Section -->
|
| 88 |
+
<section id="services" class="py-20 bg-dark-800 px-4">
|
| 89 |
+
<div class="max-w-6xl mx-auto">
|
| 90 |
+
<h2 class="text-3xl md:text-4xl font-bold mb-4 text-center">What We Offer</h2>
|
| 91 |
+
<p class="text-xl text-center mb-12 max-w-3xl mx-auto">Cutting-edge solutions to propel your business into the future</p>
|
| 92 |
+
|
| 93 |
+
<!-- Services Grid -->
|
| 94 |
+
<script src="components/services.js"></script>
|
| 95 |
+
<custom-services></custom-services>
|
| 96 |
+
</div>
|
| 97 |
+
</section>
|
| 98 |
+
|
| 99 |
+
<!-- Courses Section -->
|
| 100 |
+
<section id="courses" class="py-20 px-4">
|
| 101 |
+
<div class="max-w-6xl mx-auto">
|
| 102 |
+
<h2 class="text-3xl md:text-4xl font-bold mb-4 text-center">Our Courses</h2>
|
| 103 |
+
<p class="text-xl text-center mb-12 max-w-3xl mx-auto">Master the technologies shaping tomorrow</p>
|
| 104 |
+
|
| 105 |
+
<!-- Courses Filter -->
|
| 106 |
+
<script src="components/course-filter.js"></script>
|
| 107 |
+
<course-filter></course-filter>
|
| 108 |
+
</div>
|
| 109 |
+
</section>
|
| 110 |
+
|
| 111 |
+
<!-- Testimonials -->
|
| 112 |
+
<section class="py-20 bg-dark-800 px-4">
|
| 113 |
+
<div class="max-w-6xl mx-auto">
|
| 114 |
+
<h2 class="text-3xl md:text-4xl font-bold mb-12 text-center">What Our Clients Say</h2>
|
| 115 |
+
|
| 116 |
+
<!-- Testimonial Carousel -->
|
| 117 |
+
<script src="components/testimonials.js"></script>
|
| 118 |
+
<testimonial-carousel></testimonial-carousel>
|
| 119 |
+
</div>
|
| 120 |
+
</section>
|
| 121 |
+
|
| 122 |
+
<!-- Contact Section -->
|
| 123 |
+
<section id="contact" class="py-20 px-4">
|
| 124 |
+
<div class="max-w-6xl mx-auto">
|
| 125 |
+
<h2 class="text-3xl md:text-4xl font-bold mb-4 text-center">Join Us</h2>
|
| 126 |
+
<p class="text-xl text-center mb-12 max-w-3xl mx-auto">Ready to start your next project? Get in touch today</p>
|
| 127 |
+
|
| 128 |
+
<!-- Contact Form -->
|
| 129 |
+
<script src="components/contact-form.js"></script>
|
| 130 |
+
<contact-form></contact-form>
|
| 131 |
+
</div>
|
| 132 |
+
</section>
|
| 133 |
+
|
| 134 |
+
<!-- Footer -->
|
| 135 |
+
<script src="components/footer.js"></script>
|
| 136 |
+
<custom-footer></custom-footer>
|
| 137 |
+
|
| 138 |
+
<!-- Scripts -->
|
| 139 |
+
<script src="https://cdn.jsdelivr.net/particles.js/2.0.0/particles.min.js"></script>
|
| 140 |
+
<script src="script.js"></script>
|
| 141 |
+
<script>
|
| 142 |
+
feather.replace();
|
| 143 |
+
</script>
|
| 144 |
+
<script src="https://huggingface.co/deepsite/deepsite-badge.js"></script>
|
| 145 |
+
</body>
|
| 146 |
+
</html>
|
|
@@ -0,0 +1,206 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
// Language change event handler
|
| 3 |
+
document.addEventListener('language-change', (e) => {
|
| 4 |
+
console.log(`Language changed to: ${e.detail.language}`);
|
| 5 |
+
// In a real app, you would handle translations here
|
| 6 |
+
});
|
| 7 |
+
|
| 8 |
+
// Dark/Light mode toggle
|
| 9 |
+
const darkModeToggle = document.getElementById('darkModeToggle');
|
| 10 |
+
if (darkModeToggle) {
|
| 11 |
+
darkModeToggle.addEventListener('click', () => {
|
| 12 |
+
document.documentElement.classList.toggle('dark');
|
| 13 |
+
localStorage.setItem('darkMode', document.documentElement.classList.contains('dark'));
|
| 14 |
+
});
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
// Check for saved dark mode preference
|
| 18 |
+
if (localStorage.getItem('darkMode') === 'false') {
|
| 19 |
+
document.documentElement.classList.remove('dark');
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
// Animate elements when they come into view
|
| 23 |
+
const animateOnScroll = () => {
|
| 24 |
+
const elements = document.querySelectorAll('.animate-on-scroll');
|
| 25 |
+
elements.forEach(element => {
|
| 26 |
+
const elementPosition = element.getBoundingClientRect().top;
|
| 27 |
+
const screenPosition = window.innerHeight / 1.3;
|
| 28 |
+
|
| 29 |
+
if (elementPosition < screenPosition) {
|
| 30 |
+
element.classList.add('animated');
|
| 31 |
+
}
|
| 32 |
+
});
|
| 33 |
+
};
|
| 34 |
+
|
| 35 |
+
window.addEventListener('scroll', animateOnScroll);
|
| 36 |
+
animateOnScroll(); // Run once on page load
|
| 37 |
+
|
| 38 |
+
// Smooth scrolling for anchor links
|
| 39 |
+
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
| 40 |
+
anchor.addEventListener('click', function(e) {
|
| 41 |
+
e.preventDefault();
|
| 42 |
+
document.querySelector(this.getAttribute('href')).scrollIntoView({
|
| 43 |
+
behavior: 'smooth'
|
| 44 |
+
});
|
| 45 |
+
});
|
| 46 |
+
});
|
| 47 |
+
|
| 48 |
+
// Initialize components
|
| 49 |
+
document.addEventListener('DOMContentLoaded', function() {
|
| 50 |
+
"particles": {
|
| 51 |
+
"number": {
|
| 52 |
+
"value": 80,
|
| 53 |
+
"density": {
|
| 54 |
+
"enable": true,
|
| 55 |
+
"value_area": 800
|
| 56 |
+
}
|
| 57 |
+
},
|
| 58 |
+
"color": {
|
| 59 |
+
"value": "#4f46e5"
|
| 60 |
+
},
|
| 61 |
+
"shape": {
|
| 62 |
+
"type": "circle",
|
| 63 |
+
"stroke": {
|
| 64 |
+
"width": 0,
|
| 65 |
+
"color": "#000000"
|
| 66 |
+
},
|
| 67 |
+
"polygon": {
|
| 68 |
+
"nb_sides": 5
|
| 69 |
+
}
|
| 70 |
+
},
|
| 71 |
+
"opacity": {
|
| 72 |
+
"value": 0.5,
|
| 73 |
+
"random": false,
|
| 74 |
+
"anim": {
|
| 75 |
+
"enable": false,
|
| 76 |
+
"speed": 1,
|
| 77 |
+
"opacity_min": 0.1,
|
| 78 |
+
"sync": false
|
| 79 |
+
}
|
| 80 |
+
},
|
| 81 |
+
"size": {
|
| 82 |
+
"value": 3,
|
| 83 |
+
"random": true,
|
| 84 |
+
"anim": {
|
| 85 |
+
"enable": false,
|
| 86 |
+
"speed": 40,
|
| 87 |
+
"size_min": 0.1,
|
| 88 |
+
"sync": false
|
| 89 |
+
}
|
| 90 |
+
},
|
| 91 |
+
"line_linked": {
|
| 92 |
+
"enable": true,
|
| 93 |
+
"distance": 150,
|
| 94 |
+
"color": "#4f46e5",
|
| 95 |
+
"opacity": 0.4,
|
| 96 |
+
"width": 1
|
| 97 |
+
},
|
| 98 |
+
"move": {
|
| 99 |
+
"enable": true,
|
| 100 |
+
"speed": 2,
|
| 101 |
+
"direction": "none",
|
| 102 |
+
"random": false,
|
| 103 |
+
"straight": false,
|
| 104 |
+
"out_mode": "out",
|
| 105 |
+
"bounce": false,
|
| 106 |
+
"attract": {
|
| 107 |
+
"enable": false,
|
| 108 |
+
"rotateX": 600,
|
| 109 |
+
"rotateY": 1200
|
| 110 |
+
}
|
| 111 |
+
}
|
| 112 |
+
},
|
| 113 |
+
"interactivity": {
|
| 114 |
+
"detect_on": "canvas",
|
| 115 |
+
"events": {
|
| 116 |
+
"onhover": {
|
| 117 |
+
"enable": true,
|
| 118 |
+
"mode": "grab"
|
| 119 |
+
},
|
| 120 |
+
"onclick": {
|
| 121 |
+
"enable": true,
|
| 122 |
+
"mode": "push"
|
| 123 |
+
},
|
| 124 |
+
"resize": true
|
| 125 |
+
},
|
| 126 |
+
"modes": {
|
| 127 |
+
"grab": {
|
| 128 |
+
"distance": 140,
|
| 129 |
+
"line_linked": {
|
| 130 |
+
"opacity": 1
|
| 131 |
+
}
|
| 132 |
+
},
|
| 133 |
+
"bubble": {
|
| 134 |
+
"distance": 400,
|
| 135 |
+
"size": 40,
|
| 136 |
+
"duration": 2,
|
| 137 |
+
"opacity": 8,
|
| 138 |
+
"speed": 3
|
| 139 |
+
},
|
| 140 |
+
"repulse": {
|
| 141 |
+
"distance": 200,
|
| 142 |
+
"duration": 0.4
|
| 143 |
+
},
|
| 144 |
+
"push": {
|
| 145 |
+
"particles_nb": 4
|
| 146 |
+
},
|
| 147 |
+
"remove": {
|
| 148 |
+
"particles_nb": 2
|
| 149 |
+
}
|
| 150 |
+
}
|
| 151 |
+
},
|
| 152 |
+
"retina_detect": true
|
| 153 |
+
});
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
+
// Dark/Light mode toggle
|
| 157 |
+
const darkModeToggle = document.getElementById('darkModeToggle');
|
| 158 |
+
if (darkModeToggle) {
|
| 159 |
+
darkModeToggle.addEventListener('click', () => {
|
| 160 |
+
document.documentElement.classList.toggle('dark');
|
| 161 |
+
localStorage.setItem('darkMode', document.documentElement.classList.contains('dark'));
|
| 162 |
+
});
|
| 163 |
+
}
|
| 164 |
+
|
| 165 |
+
// Check for saved dark mode preference
|
| 166 |
+
if (localStorage.getItem('darkMode') === 'false') {
|
| 167 |
+
document.documentElement.classList.remove('dark');
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
// Language switcher functionality
|
| 171 |
+
const languageSwitcher = document.getElementById('languageSwitcher');
|
| 172 |
+
if (languageSwitcher) {
|
| 173 |
+
languageSwitcher.addEventListener('change', (e) => {
|
| 174 |
+
const lang = e.target.value;
|
| 175 |
+
// Here you would typically reload the page with the new language
|
| 176 |
+
console.log(`Language changed to: ${lang}`);
|
| 177 |
+
// In a real app, you would handle translations here
|
| 178 |
+
});
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
// Animate elements when they come into view
|
| 182 |
+
const animateOnScroll = () => {
|
| 183 |
+
const elements = document.querySelectorAll('.animate-on-scroll');
|
| 184 |
+
elements.forEach(element => {
|
| 185 |
+
const elementPosition = element.getBoundingClientRect().top;
|
| 186 |
+
const screenPosition = window.innerHeight / 1.3;
|
| 187 |
+
|
| 188 |
+
if (elementPosition < screenPosition) {
|
| 189 |
+
element.classList.add('animated');
|
| 190 |
+
}
|
| 191 |
+
});
|
| 192 |
+
};
|
| 193 |
+
|
| 194 |
+
window.addEventListener('scroll', animateOnScroll);
|
| 195 |
+
animateOnScroll(); // Run once on page load
|
| 196 |
+
});
|
| 197 |
+
|
| 198 |
+
// Smooth scrolling for anchor links
|
| 199 |
+
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
| 200 |
+
anchor.addEventListener('click', function(e) {
|
| 201 |
+
e.preventDefault();
|
| 202 |
+
document.querySelector(this.getAttribute('href')).scrollIntoView({
|
| 203 |
+
behavior: 'smooth'
|
| 204 |
+
});
|
| 205 |
+
});
|
| 206 |
+
});
|
|
@@ -1,28 +1,96 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
}
|
| 5 |
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
margin-top: 0;
|
| 9 |
}
|
| 10 |
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
}
|
| 17 |
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
}
|
| 25 |
|
| 26 |
-
|
| 27 |
-
|
|
|
|
|
|
|
|
|
|
| 28 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&display=swap');
|
| 2 |
+
|
| 3 |
+
* {
|
| 4 |
+
font-family: 'Space Grotesk', sans-serif;
|
| 5 |
+
scroll-behavior: smooth;
|
| 6 |
+
}
|
| 7 |
+
|
| 8 |
+
::selection {
|
| 9 |
+
background: rgba(79, 70, 229, 0.3);
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
/* Custom Scrollbar */
|
| 13 |
+
::-webkit-scrollbar {
|
| 14 |
+
width: 8px;
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
::-webkit-scrollbar-track {
|
| 18 |
+
background: #0f172a;
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
::-webkit-scrollbar-thumb {
|
| 22 |
+
background: #4f46e5;
|
| 23 |
+
border-radius: 4px;
|
| 24 |
}
|
| 25 |
|
| 26 |
+
::-webkit-scrollbar-thumb:hover {
|
| 27 |
+
background: #4338ca;
|
|
|
|
| 28 |
}
|
| 29 |
|
| 30 |
+
/* Particle.js container */
|
| 31 |
+
#particles-js {
|
| 32 |
+
position: absolute;
|
| 33 |
+
width: 100%;
|
| 34 |
+
height: 100%;
|
| 35 |
+
background-color: #0f172a;
|
| 36 |
+
background-image: url("");
|
| 37 |
+
background-repeat: no-repeat;
|
| 38 |
+
background-size: cover;
|
| 39 |
+
background-position: 50% 50%;
|
| 40 |
+
z-index: 0;
|
| 41 |
}
|
| 42 |
|
| 43 |
+
/* Glassmorphism effect */
|
| 44 |
+
.glass {
|
| 45 |
+
backdrop-filter: blur(16px) saturate(180%);
|
| 46 |
+
-webkit-backdrop-filter: blur(16px) saturate(180%);
|
| 47 |
+
background-color: rgba(15, 23, 42, 0.75);
|
| 48 |
+
border: 1px solid rgba(255, 255, 255, 0.125);
|
| 49 |
}
|
| 50 |
|
| 51 |
+
/* Neon glow effect */
|
| 52 |
+
.neon {
|
| 53 |
+
box-shadow: 0 0 10px rgba(79, 70, 229, 0.5),
|
| 54 |
+
0 0 20px rgba(79, 70, 229, 0.3),
|
| 55 |
+
0 0 30px rgba(79, 70, 229, 0.1);
|
| 56 |
}
|
| 57 |
+
|
| 58 |
+
.neon-hover:hover {
|
| 59 |
+
box-shadow: 0 0 15px rgba(79, 70, 229, 0.7),
|
| 60 |
+
0 0 25px rgba(79, 70, 229, 0.5),
|
| 61 |
+
0 0 35px rgba(79, 70, 229, 0.3);
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
/* Input glow effect */
|
| 65 |
+
.input-glow:focus {
|
| 66 |
+
box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.3);
|
| 67 |
+
border-color: rgba(79, 70, 229, 0.5);
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
/* Pulse animation for important elements */
|
| 71 |
+
.pulse-element {
|
| 72 |
+
animation: pulse 2s infinite;
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
@keyframes pulse {
|
| 76 |
+
0% {
|
| 77 |
+
opacity: 0.7;
|
| 78 |
+
}
|
| 79 |
+
50% {
|
| 80 |
+
opacity: 1;
|
| 81 |
+
}
|
| 82 |
+
100% {
|
| 83 |
+
opacity: 0.7;
|
| 84 |
+
}
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
/* Responsive adjustments */
|
| 88 |
+
@media (max-width: 768px) {
|
| 89 |
+
#hero h1 {
|
| 90 |
+
font-size: 3rem;
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
+
#hero p {
|
| 94 |
+
font-size: 1.25rem;
|
| 95 |
+
}
|
| 96 |
+
}
|