Skip to content

Commit 3b6fd7c

Browse files
committed
fix(website): feather the hero mascot into the page (drop the grey box + glass sheen)
1 parent 85a569b commit 3b6fd7c

1 file changed

Lines changed: 30 additions & 53 deletions

File tree

website/app/(home)/styles/home.css

Lines changed: 30 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -34,71 +34,48 @@
3434
position: relative;
3535
width: clamp(224px, 30vw, 324px);
3636
aspect-ratio: 460 / 539;
37-
border-radius: 30px;
38-
overflow: hidden;
39-
background: #c2c3c8;
40-
border: 1px solid var(--border-2);
41-
box-shadow: 0 40px 90px -34px var(--accent-glow), var(--shadow-md);
4237
}
38+
/* The source clip has a grey backdrop baked in, so boxing it always reads as a
39+
pasted square. Instead we feather the media's edges to transparent — Vee melts
40+
into the page, no frame, no seam, matches any background. */
4341
.hero-mascot-stage img,
4442
.hero-mascot-stage video {
4543
width: 100%;
4644
height: 100%;
4745
object-fit: cover;
4846
display: block;
47+
-webkit-mask-image: radial-gradient(
48+
ellipse 68% 76% at 50% 44%,
49+
#000 44%,
50+
rgba(0, 0, 0, 0.5) 68%,
51+
transparent 90%
52+
);
53+
mask-image: radial-gradient(
54+
ellipse 68% 76% at 50% 44%,
55+
#000 44%,
56+
rgba(0, 0, 0, 0.5) 68%,
57+
transparent 90%
58+
);
4959
}
50-
/* Soft inner ring + an accent wash from below so the port feels lit, not pasted. */
60+
/* A soft accent pool beneath Vee so the feathered portrait reads as placed, not
61+
floating. Sits behind the media, unaffected by the mask above. */
5162
.hero-mascot-stage::after {
5263
content: '';
5364
position: absolute;
54-
inset: 0;
55-
border-radius: inherit;
56-
pointer-events: none;
57-
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.35),
58-
inset 0 -56px 60px -34px var(--accent-glow);
59-
}
60-
/* Lens sheen — a soft specular glint drifts across the glass, like light
61-
catching a lens. No hard scan-line. Slow, with a long calm pause between
62-
passes. Reduced-motion: nothing moves. */
63-
.hero-mascot-stage::before {
64-
content: '';
65-
position: absolute;
66-
inset: -30%;
67-
z-index: 2;
68-
pointer-events: none;
69-
opacity: 0;
70-
background: linear-gradient(
71-
100deg,
72-
transparent 41%,
73-
rgba(226, 246, 255, 0.1) 47%,
74-
rgba(240, 251, 255, 0.34) 50%,
75-
rgba(226, 246, 255, 0.1) 53%,
76-
transparent 59%
65+
left: 50%;
66+
bottom: 7%;
67+
width: 56%;
68+
height: 11%;
69+
transform: translateX(-50%);
70+
border-radius: 50%;
71+
background: radial-gradient(
72+
ellipse at center,
73+
var(--accent-glow, rgba(37, 99, 235, 0.28)) 0%,
74+
transparent 72%
7775
);
78-
mix-blend-mode: screen;
79-
transform: translateX(-58%);
80-
}
81-
@media (prefers-reduced-motion: no-preference) {
82-
.hero-mascot-stage::before {
83-
animation: lensSheen 7s var(--ease-out) infinite;
84-
}
85-
}
86-
@keyframes lensSheen {
87-
0% {
88-
transform: translateX(-58%);
89-
opacity: 0;
90-
}
91-
6% {
92-
opacity: 1;
93-
}
94-
19% {
95-
opacity: 1;
96-
}
97-
27%,
98-
100% {
99-
transform: translateX(58%);
100-
opacity: 0;
101-
}
76+
filter: blur(9px);
77+
pointer-events: none;
78+
z-index: -1;
10279
}
10380
.hero-say {
10481
font-size: 0.9rem;

0 commit comments

Comments
 (0)