@@ -14,7 +14,11 @@ const { pluginCount } = Astro.props;
1414 <div class =" hero-glow hero-glow--1" ></div >
1515 <div class =" hero-glow hero-glow--2" ></div >
1616 <div class =" hero-glow hero-glow--3" ></div >
17+ <div class =" hero-orb hero-orb--1" ></div >
18+ <div class =" hero-orb hero-orb--2" ></div >
19+ <div class =" hero-orb hero-orb--3" ></div >
1720 <div class =" hero-grid" ></div >
21+ <div class =" hero-noise" ></div >
1822 </div >
1923 <div class =" hero-content container" >
2024 <div class =" hero-badge" >
@@ -75,50 +79,144 @@ const { pluginCount } = Astro.props;
7579 .hero-gradient {
7680 position: absolute;
7781 inset: 0;
78- background: linear-gradient(180deg,
79- #007a94 0%,
80- #006a82 30%,
81- #005268 60%,
82- var(--color-bg-primary) 100%
83- );
84- opacity: 0.35;
82+ background:
83+ radial-gradient(ellipse 80% 50% at 50% 0%, rgba(0, 165, 184, 0.18) 0%, transparent 100%),
84+ radial-gradient(ellipse 60% 80% at 20% 20%, rgba(0, 82, 104, 0.25) 0%, transparent 70%),
85+ radial-gradient(ellipse 50% 70% at 80% 10%, rgba(0, 122, 148, 0.2) 0%, transparent 70%),
86+ linear-gradient(180deg,
87+ #00a5b8 0%,
88+ #007a94 15%,
89+ #005268 40%,
90+ var(--color-bg-primary) 100%
91+ );
92+ opacity: 0.5;
8593 }
8694
95+ /* Large ambient glows — slow drifting animation */
8796 .hero-glow--1 {
8897 position: absolute;
89- top: -20%;
90- left: 30%;
91- width: 50%;
92- height: 80%;
93- background: radial-gradient(ellipse at center, rgba(0, 165, 184, 0.25) 0%, transparent 70%);
98+ top: -30%;
99+ left: 20%;
100+ width: 60%;
101+ height: 90%;
102+ background: radial-gradient(ellipse at center, rgba(0, 165, 184, 0.22) 0%, transparent 65%);
103+ animation: glowDrift1 12s ease-in-out infinite;
94104 }
95105
96106 .hero-glow--2 {
97107 position: absolute;
98- top: -10%;
99- right: 10%;
108+ top: -15%;
109+ right: 5%;
110+ width: 45%;
111+ height: 70%;
112+ background: radial-gradient(ellipse at center, rgba(0, 122, 148, 0.18) 0%, transparent 65%);
113+ animation: glowDrift2 15s ease-in-out infinite;
114+ }
115+
116+ .hero-glow--3 {
117+ position: absolute;
118+ bottom: -10%;
119+ left: 5%;
100120 width: 40%;
101121 height: 60%;
102- background: radial-gradient(ellipse at center, rgba(0, 122, 148, 0.2) 0%, transparent 70%);
122+ background: radial-gradient(ellipse at center, rgba(0, 165, 184, 0.1) 0%, transparent 65%);
123+ animation: glowDrift3 18s ease-in-out infinite;
103124 }
104125
105- .hero-glow--3 {
126+ /* Floating orbs — animated blurred circles */
127+ .hero-orb {
106128 position: absolute;
107- bottom: 0;
108- left: 10%;
109- width: 30%;
110- height: 50%;
111- background: radial-gradient(ellipse at center, rgba(0, 165, 184, 0.08) 0%, transparent 70%);
129+ border-radius: 50%;
130+ filter: blur(60px);
131+ will-change: transform;
112132 }
113133
114- /* Subtle dot grid pattern */
134+ .hero-orb--1 {
135+ top: 5%;
136+ left: 15%;
137+ width: 200px;
138+ height: 200px;
139+ background: rgba(0, 165, 184, 0.15);
140+ animation: orbFloat1 20s ease-in-out infinite;
141+ }
142+
143+ .hero-orb--2 {
144+ top: 20%;
145+ right: 20%;
146+ width: 150px;
147+ height: 150px;
148+ background: rgba(0, 122, 148, 0.12);
149+ animation: orbFloat2 25s ease-in-out infinite;
150+ }
151+
152+ .hero-orb--3 {
153+ bottom: 15%;
154+ left: 50%;
155+ width: 180px;
156+ height: 180px;
157+ background: rgba(0, 165, 184, 0.08);
158+ animation: orbFloat3 22s ease-in-out infinite;
159+ }
160+
161+ /* Dot grid with cross-fade lines for a mesh look */
115162 .hero-grid {
116163 position: absolute;
117164 inset: 0;
118- background-image: radial-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px);
119- background-size: 32px 32px;
120- mask-image: radial-gradient(ellipse 60% 60% at 50% 30%, black 20%, transparent 80%);
121- -webkit-mask-image: radial-gradient(ellipse 60% 60% at 50% 30%, black 20%, transparent 80%);
165+ background-image:
166+ linear-gradient(rgba(0, 165, 184, 0.04) 1px, transparent 1px),
167+ linear-gradient(90deg, rgba(0, 165, 184, 0.04) 1px, transparent 1px),
168+ radial-gradient(rgba(0, 165, 184, 0.06) 1px, transparent 1px);
169+ background-size: 64px 64px, 64px 64px, 32px 32px;
170+ mask-image: radial-gradient(ellipse 70% 55% at 50% 25%, black 10%, transparent 75%);
171+ -webkit-mask-image: radial-gradient(ellipse 70% 55% at 50% 25%, black 10%, transparent 75%);
172+ }
173+
174+ /* Film grain / noise texture for depth */
175+ .hero-noise {
176+ position: absolute;
177+ inset: 0;
178+ opacity: 0.03;
179+ background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
180+ background-repeat: repeat;
181+ background-size: 256px 256px;
182+ mix-blend-mode: overlay;
183+ }
184+
185+ @keyframes glowDrift1 {
186+ 0%, 100% { transform: translate(0, 0) scale(1); }
187+ 33% { transform: translate(3%, 5%) scale(1.05); }
188+ 66% { transform: translate(-2%, -3%) scale(0.97); }
189+ }
190+
191+ @keyframes glowDrift2 {
192+ 0%, 100% { transform: translate(0, 0) scale(1); }
193+ 33% { transform: translate(-4%, 3%) scale(1.03); }
194+ 66% { transform: translate(2%, -4%) scale(0.98); }
195+ }
196+
197+ @keyframes glowDrift3 {
198+ 0%, 100% { transform: translate(0, 0) scale(1); }
199+ 50% { transform: translate(5%, -3%) scale(1.06); }
200+ }
201+
202+ @keyframes orbFloat1 {
203+ 0%, 100% { transform: translate(0, 0); }
204+ 25% { transform: translate(40px, -20px); }
205+ 50% { transform: translate(-10px, 30px); }
206+ 75% { transform: translate(25px, 10px); }
207+ }
208+
209+ @keyframes orbFloat2 {
210+ 0%, 100% { transform: translate(0, 0); }
211+ 25% { transform: translate(-30px, 15px); }
212+ 50% { transform: translate(20px, -25px); }
213+ 75% { transform: translate(-15px, -10px); }
214+ }
215+
216+ @keyframes orbFloat3 {
217+ 0%, 100% { transform: translate(0, 0); }
218+ 33% { transform: translate(25px, -35px); }
219+ 66% { transform: translate(-30px, 15px); }
122220 }
123221
124222 .hero-fade {
@@ -172,10 +270,17 @@ const { pluginCount } = Astro.props;
172270 }
173271
174272 .hero-highlight {
175- background: linear-gradient(90deg, #00a5b8, var(--color-primary-hover));
273+ background: linear-gradient(90deg, #00a5b8, #4dc9da, #00c8de, #00a5b8);
274+ background-size: 300% 100%;
176275 -webkit-background-clip: text;
177276 -webkit-text-fill-color: transparent;
178277 background-clip: text;
278+ animation: highlightShimmer 6s ease-in-out infinite;
279+ }
280+
281+ @keyframes highlightShimmer {
282+ 0%, 100% { background-position: 0% 50%; }
283+ 50% { background-position: 100% 50%; }
179284 }
180285
181286 .hero-subtitle {
@@ -207,8 +312,8 @@ const { pluginCount } = Astro.props;
207312 font-family: var(--font-sans);
208313 font-size: 1rem;
209314 color: var(--color-text-primary);
210- background: rgba(26 , 26, 46 , 0.8);
211- border: 1px solid rgba(42 , 42, 62 , 0.8);
315+ background: rgba(19 , 26, 34 , 0.8);
316+ border: 1px solid rgba(30 , 42, 52 , 0.8);
212317 border-radius: var(--radius-lg);
213318 outline: none;
214319 backdrop-filter: blur(8px);
@@ -222,7 +327,7 @@ const { pluginCount } = Astro.props;
222327 .hero-search-input:focus {
223328 border-color: var(--color-primary-light);
224329 box-shadow: 0 0 0 3px rgba(0, 165, 184, 0.15), var(--shadow-glow);
225- background: rgba(26 , 26, 46 , 0.95);
330+ background: rgba(19 , 26, 34 , 0.95);
226331 }
227332
228333 .hero-search-kbd {
@@ -234,8 +339,8 @@ const { pluginCount } = Astro.props;
234339 font-size: 0.7rem;
235340 font-weight: 500;
236341 color: var(--color-text-muted);
237- background: rgba(42 , 42, 62 , 0.6);
238- border: 1px solid rgba(42 , 42, 62 , 0.8);
342+ background: rgba(30 , 42, 52 , 0.6);
343+ border: 1px solid rgba(30 , 42, 52 , 0.8);
239344 padding: 3px 8px;
240345 border-radius: var(--radius-sm);
241346 pointer-events: none;
@@ -306,6 +411,11 @@ const { pluginCount } = Astro.props;
306411 }
307412 }
308413
414+ @media (max-width: 640px) {
415+ .hero-orb { display: none; }
416+ .hero-noise { display: none; }
417+ }
418+
309419 @media (max-width: 380px) {
310420 .hero {
311421 padding: 40px 0 28px;
@@ -320,4 +430,16 @@ const { pluginCount } = Astro.props;
320430 margin-bottom: 24px;
321431 }
322432 }
433+
434+ @media (prefers-reduced-motion: reduce) {
435+ .hero-glow--1,
436+ .hero-glow--2,
437+ .hero-glow--3,
438+ .hero-orb--1,
439+ .hero-orb--2,
440+ .hero-orb--3,
441+ .hero-highlight {
442+ animation: none;
443+ }
444+ }
323445</style >
0 commit comments