@@ -8,7 +8,7 @@ import Footer from '../components/Footer.astro';
88 <meta charset =" UTF-8" />
99 <meta name =" viewport" content =" width=device-width, initial-scale=1.0" />
1010 <meta name =" description" content =" DarkVectr - Cybersecurity Consulting for the Bold" />
11- <meta name =" theme-color" content =" #0d1117 " />
11+ <meta name =" theme-color" content =" #121212 " />
1212 <title >DarkVectr | Cybersecurity Consulting</title >
1313 <link rel =" icon" href =" /favicon.ico" type =" image/x-icon" />
1414 <link
@@ -26,7 +26,23 @@ import Footer from '../components/Footer.astro';
2626 document.documentElement.classList.remove("dark");
2727 }
2828 </script >
29- <style >html { scroll-behavior: smooth; }</style >
29+ <style >
30+ html { scroll-behavior: smooth; }
31+ .parallax-shape { transition: transform 0.2s ease-out; }
32+ body::before {
33+ content: "";
34+ position: fixed;
35+ inset: 0;
36+ background: radial-gradient(circle at center, rgba(16,185,129,0.2), transparent 70%);
37+ pointer-events: none;
38+ animation: pulseGradient 6s ease-in-out infinite;
39+ }
40+ @keyframes pulseGradient {
41+ 0% { opacity: 0.2; transform: scale(1); }
42+ 50% { opacity: 0.05; transform: scale(1.2); }
43+ 100% { opacity: 0.2; transform: scale(1); }
44+ }
45+ </style >
3046 </head >
3147 <body class =" bg-background text-foreground font-sans" >
3248 <Header />
@@ -37,23 +53,11 @@ import Footer from '../components/Footer.astro';
3753 <script >
3854 const htmlEl = document.documentElement;
3955 const toggle = document.getElementById("theme-toggle");
40- const iconLight = document.getElementById("theme-icon-light");
4156 const iconDark = document.getElementById("theme-icon-dark");
42- function updateIcons() {
43- if (htmlEl.classList.contains("dark")) {
44- iconLight.classList.add("hidden");
45- iconDark.classList.remove("hidden");
46- } else {
47- iconLight.classList.remove("hidden");
48- iconDark.classList.add("hidden");
49- }
50- }
5157 toggle.addEventListener("click", () => {
5258 htmlEl.classList.toggle("dark");
5359 localStorage.theme = htmlEl.classList.contains("dark") ? "dark" : "light";
54- updateIcons();
5560 });
56- updateIcons();
5761 </script >
5862 <!-- Particle background and tilt effects -->
5963 <script type =" text/javascript" src =" https://cdn.jsdelivr.net/npm/tsparticles@2/tsparticles.min.js" ></script >
@@ -95,12 +99,12 @@ import Footer from '../components/Footer.astro';
9599 fpsLimit: 60,
96100 particles: {
97101 number: { value: 50 },
98- color: { value: '#58a6ff ' },
102+ color: { value: '#10b981 ' },
99103 shape: { type: 'circle' },
100104 opacity: { value: 0.2 },
101105 size: { value: { min: 1, max: 3 } },
102106 move: { enable: true, speed: 1, outModes: 'out' },
103- links: { enable: true, distance: 150, color: '#58a6ff ', opacity: 0.1, width: 1 }
107+ links: { enable: true, distance: 150, color: '#10b981 ', opacity: 0.1, width: 1 }
104108 },
105109 interactivity: {
106110 detectsOn: 'canvas',
@@ -118,6 +122,21 @@ import Footer from '../components/Footer.astro';
118122 background: { color: 'transparent' }
119123 });
120124 }
125+
126+ // Parallax movement for hero background shapes
127+ const heroSection = document.getElementById('hero');
128+ if (heroSection) {
129+ const shapes = heroSection.querySelectorAll('.parallax-shape');
130+ heroSection.addEventListener('mousemove', e => {
131+ const { width, height, left, top } = heroSection.getBoundingClientRect();
132+ const x = ((e.clientX - left) / width - 0.5) * 2;
133+ const y = ((e.clientY - top) / height - 0.5) * 2;
134+ shapes.forEach(shape => {
135+ const speed = parseFloat(shape.dataset.speed) || 0;
136+ shape.style.transform = `translate(${x * speed}px, ${y * speed}px)`;
137+ });
138+ });
139+ }
121140 });
122141 </script >
123142 </body >
0 commit comments