Skip to content

Commit f19f65a

Browse files
committed
feat(ui): add catppuccin gradient and glow effects
- Hero: soft radial glow blobs in background, title gradient shimmer, terminal mockup glow on hover - Navbar: gradient underline (green->sky->mauve) when scrolled - Hero install button: gradient background + glow - Feature cards: per-color glow on hover (via :has)
1 parent abb74ad commit f19f65a

3 files changed

Lines changed: 107 additions & 3 deletions

File tree

src/assets/shared.css

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,27 @@ section {
387387
var(--ctp-surface0));
388388
}
389389

390+
.features-grid .custom-card:has(.color-green):hover,
391+
.features-grid .custom-card:has(.icon-primary):hover {
392+
box-shadow: 0 10px 40px color-mix(in srgb, var(--ctp-green) 22%, transparent);
393+
}
394+
395+
.features-grid .custom-card:has(.color-mauve):hover {
396+
box-shadow: 0 10px 40px color-mix(in srgb, var(--ctp-mauve) 22%, transparent);
397+
}
398+
399+
.features-grid .custom-card:has(.color-peach):hover {
400+
box-shadow: 0 10px 40px color-mix(in srgb, var(--ctp-peach) 22%, transparent);
401+
}
402+
403+
.features-grid .custom-card:has(.color-pink):hover {
404+
box-shadow: 0 10px 40px color-mix(in srgb, var(--ctp-pink) 22%, transparent);
405+
}
406+
407+
.features-grid .custom-card:has(.color-sky):hover {
408+
box-shadow: 0 10px 40px color-mix(in srgb, var(--ctp-sky) 22%, transparent);
409+
}
410+
390411
.special-features-grid {
391412
display: grid;
392413
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
@@ -496,6 +517,20 @@ section {
496517
color: var(--ctp-green) !important;
497518
}
498519

520+
:root .el-button.btn-install {
521+
background: linear-gradient(120deg,
522+
var(--ctp-green),
523+
color-mix(in srgb, var(--ctp-sky) 60%, var(--ctp-green))) !important;
524+
border-color: transparent !important;
525+
box-shadow: 0 4px 20px color-mix(in srgb, var(--ctp-green) 30%, transparent);
526+
transition: all 0.3s ease;
527+
}
528+
529+
:root .el-button.btn-install:hover {
530+
box-shadow: 0 6px 28px color-mix(in srgb, var(--ctp-green) 45%, transparent);
531+
filter: brightness(1.05);
532+
}
533+
499534
.copy-float {
500535
position: absolute;
501536
top: 0.75rem;

src/components/HeroSection.vue

Lines changed: 54 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,45 @@ onUnmounted(() => {
134134
<style scoped>
135135
/* Hero Section */
136136
.hero {
137+
position: relative;
137138
padding: 160px 0 100px;
138139
background-color: var(--ctp-mantle);
139140
overflow: hidden;
140141
transition: background 0.3s;
141142
}
142143
144+
.hero::before,
145+
.hero::after {
146+
content: '';
147+
position: absolute;
148+
border-radius: 50%;
149+
pointer-events: none;
150+
z-index: 0;
151+
}
152+
153+
.hero::before {
154+
width: 480px;
155+
height: 480px;
156+
top: -140px;
157+
left: -140px;
158+
background: radial-gradient(circle,
159+
color-mix(in srgb, var(--ctp-green) 26%, transparent),
160+
transparent 70%);
161+
}
162+
163+
.hero::after {
164+
width: 560px;
165+
height: 560px;
166+
bottom: -180px;
167+
right: -160px;
168+
background: radial-gradient(circle,
169+
color-mix(in srgb, var(--ctp-mauve) 22%, transparent),
170+
transparent 70%);
171+
}
172+
143173
.hero-container {
174+
position: relative;
175+
z-index: 1;
144176
display: flex;
145177
flex-direction: column;
146178
align-items: center;
@@ -203,9 +235,23 @@ onUnmounted(() => {
203235
var(--ctp-green),
204236
var(--ctp-sky) 50%,
205237
var(--ctp-mauve));
238+
background-size: 200% auto;
206239
-webkit-background-clip: text;
207240
background-clip: text;
208241
color: transparent;
242+
animation: text-shift 8s ease-in-out infinite;
243+
}
244+
245+
@keyframes text-shift {
246+
247+
0%,
248+
100% {
249+
background-position: 0% 50%;
250+
}
251+
252+
50% {
253+
background-position: 100% 50%;
254+
}
209255
}
210256
211257
.hero-description {
@@ -264,16 +310,22 @@ onUnmounted(() => {
264310
background-color: var(--ctp-crust);
265311
border-radius: 12px;
266312
border: 1px solid var(--ctp-surface1);
267-
box-shadow: var(--el-box-shadow-light);
313+
box-shadow:
314+
var(--el-box-shadow-light),
315+
0 0 40px color-mix(in srgb, var(--ctp-green) 18%, transparent);
268316
transform: rotateY(-5deg) rotateX(5deg);
269317
transition:
270318
transform 0.3s,
271-
background-color 0.3s;
319+
background-color 0.3s,
320+
box-shadow 0.3s;
272321
overflow: hidden;
273322
}
274323
275324
.terminal-mockup:hover {
276325
transform: rotateY(0) rotateX(0);
326+
box-shadow:
327+
var(--el-box-shadow-light),
328+
0 0 60px color-mix(in srgb, var(--ctp-green) 30%, transparent);
277329
}
278330
279331
.term-header {

src/components/NavBar.vue

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,24 @@ onUnmounted(() => {
104104
}
105105
106106
.navbar.scrolled {
107-
border-bottom: 1px solid var(--ctp-surface1);
107+
border-bottom-color: transparent;
108+
}
109+
110+
.navbar.scrolled::after {
111+
content: '';
112+
position: absolute;
113+
left: 0;
114+
right: 0;
115+
bottom: -1px;
116+
height: 1px;
117+
background: linear-gradient(90deg,
118+
transparent,
119+
var(--ctp-green),
120+
var(--ctp-sky),
121+
var(--ctp-mauve),
122+
transparent);
123+
opacity: 0.6;
124+
pointer-events: none;
108125
}
109126
110127
.nav-content {

0 commit comments

Comments
 (0)