Skip to content

Commit f4608be

Browse files
devakoneclaude
andcommitted
style: refine vibe echo to subtle pulsing keyframe animation
Replace static translate-on-hover with slow, muted keyframe rings that scale outward and fade. Apply the effect to the analysis detail card and timeline section. Remove overflow-hidden so rings aren't clipped. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent f3d869d commit f4608be

3 files changed

Lines changed: 49 additions & 17 deletions

File tree

apps/web/src/app/analysis/[jobId]/AnalysisClient.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -908,7 +908,7 @@ export default function AnalysisClient({ jobId }: { jobId: string }) {
908908
</div>
909909

910910
{/* Detailed Analysis Card */}
911-
<div className="relative overflow-hidden rounded-[2rem] border border-black/5 bg-white shadow-sm">
911+
<div className="vibe-echo relative rounded-[2rem] border border-black/5 bg-white shadow-sm">
912912
<div className="absolute inset-0 bg-gradient-to-br from-violet-500/8 via-transparent to-indigo-500/8" />
913913
<div className="relative p-8">
914914
<RepoIdentitySection
@@ -1113,7 +1113,7 @@ export default function AnalysisClient({ jobId }: { jobId: string }) {
11131113
</div>
11141114
</div>
11151115

1116-
<details className="rounded-3xl border border-black/5 bg-white p-6 shadow-sm">
1116+
<details className="vibe-echo rounded-3xl border border-black/5 bg-white p-6 shadow-sm">
11171117
<summary className="cursor-pointer text-sm font-semibold text-zinc-900">
11181118
Timeline and details
11191119
</summary>

apps/web/src/app/globals.css

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -132,58 +132,90 @@ body {
132132
}
133133
}
134134

135-
/* Vibe echo — cards that look like they're vibrating */
135+
/* Vibe echo — subtle radiating pulse on hover */
136+
@keyframes echo-ring-1 {
137+
0% {
138+
transform: scale(1);
139+
opacity: 0.15;
140+
}
141+
100% {
142+
transform: scale(1.015);
143+
opacity: 0;
144+
}
145+
}
146+
147+
@keyframes echo-ring-2 {
148+
0% {
149+
transform: scale(1);
150+
opacity: 0.1;
151+
}
152+
100% {
153+
transform: scale(1.03);
154+
opacity: 0;
155+
}
156+
}
157+
136158
.vibe-echo {
137159
position: relative;
160+
transition: border-color 0.5s ease;
138161
}
139162

140163
.vibe-echo::before,
141164
.vibe-echo::after {
142165
content: "";
143166
position: absolute;
144-
inset: 0;
167+
inset: -1px;
145168
border-radius: inherit;
146-
border: 1px solid;
147169
pointer-events: none;
148170
opacity: 0;
149-
transition: opacity 0.4s, transform 0.4s;
150171
}
151172

152173
.vibe-echo::before {
153-
border-color: #7c3aed;
174+
border: 1px solid #7c3aed;
154175
}
155176

156177
.vibe-echo::after {
157-
border-color: #6366f1;
178+
border: 1px solid #6366f1;
179+
}
180+
181+
.vibe-echo:hover {
182+
border-color: rgba(124, 58, 237, 0.1);
158183
}
159184

160185
.vibe-echo:hover::before {
161-
opacity: 0.25;
162-
transform: translate(-3px, -2px);
186+
animation: echo-ring-1 3s ease-out infinite;
163187
}
164188

165189
.vibe-echo:hover::after {
166-
opacity: 0.15;
167-
transform: translate(3px, 2px);
190+
animation: echo-ring-2 3s ease-out 1s infinite;
168191
}
169192

170193
/* Smaller echo for buttons */
194+
@keyframes echo-ring-sm {
195+
0% {
196+
transform: scale(1);
197+
opacity: 0.15;
198+
}
199+
100% {
200+
transform: scale(1.06);
201+
opacity: 0;
202+
}
203+
}
204+
171205
.vibe-echo-sm {
172206
position: relative;
173207
}
174208

175209
.vibe-echo-sm::after {
176210
content: "";
177211
position: absolute;
178-
inset: 0;
212+
inset: -1px;
179213
border-radius: inherit;
180214
border: 1px solid #6366f1;
181215
pointer-events: none;
182216
opacity: 0;
183-
transition: opacity 0.3s, transform 0.3s;
184217
}
185218

186219
.vibe-echo-sm:hover::after {
187-
opacity: 0.3;
188-
transform: translate(2px, 1px);
220+
animation: echo-ring-sm 2.5s ease-out infinite;
189221
}

apps/web/src/components/vcp/repo/RepoIdentitySection.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ export function RepoIdentitySection({
3737
className,
3838
}: RepoIdentitySectionProps) {
3939
return (
40-
<div className={cn("relative overflow-hidden rounded-[2rem] border border-black/5 bg-white shadow-sm", className)}>
40+
<div className={cn("relative rounded-[2rem] border border-black/5 bg-white shadow-sm", className)}>
4141
<div className="absolute inset-0 bg-gradient-to-br from-violet-500/8 via-transparent to-indigo-500/8" />
4242
<div className="relative p-8">
4343
<div className="max-w-2xl">

0 commit comments

Comments
 (0)