Skip to content

Commit 7e5e0bf

Browse files
committed
fix: lock classic logo mode and remove world-logo edge artifacts
1 parent a25c45a commit 7e5e0bf

3 files changed

Lines changed: 20 additions & 156 deletions

File tree

site/index.html

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
</header>
3030

3131
<main>
32-
<section class="hero hero-grid">
32+
<section class="hero">
3333
<div class="hero-copy">
3434
<p class="kicker">Chrome Extension</p>
3535
<h1>Tap once.<br />Group smart.<br />Move fast.</h1>
@@ -49,17 +49,6 @@ <h1>Tap once.<br />Group smart.<br />Move fast.</h1>
4949
>
5050
</div>
5151
</div>
52-
53-
<div class="hero-visual">
54-
<div class="logo-stage" id="logoStage" aria-hidden="true">
55-
<div class="halo"></div>
56-
<div class="logo-orb">
57-
<img src="assets/logo-primary.png" alt="" />
58-
</div>
59-
<div class="scanline"></div>
60-
<div class="logo-label">TapOG.ai</div>
61-
</div>
62-
</div>
6352
</section>
6453

6554
<section class="cards">

site/main.js

Lines changed: 13 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,26 @@
11
(() => {
2-
const logoStage = document.getElementById("logoStage");
32
const worldLogo = document.getElementById("worldLogo");
3+
if (!worldLogo) {
4+
return;
5+
}
46

5-
const setWorldLogoTransform = () => {
6-
if (!worldLogo) {
7-
return;
8-
}
7+
let rafId = 0;
98

9+
const setWorldLogoTransform = () => {
10+
rafId = 0;
1011
const scrollY = window.scrollY || window.pageYOffset || 0;
1112
const driftY = scrollY * 0.12;
1213
const rotate = scrollY * 0.01;
1314
worldLogo.style.transform = `translate3d(-50%, calc(-50% + ${driftY.toFixed(2)}px), 0) rotate(${rotate.toFixed(2)}deg)`;
1415
};
1516

16-
setWorldLogoTransform();
17-
window.addEventListener("scroll", setWorldLogoTransform, { passive: true });
18-
19-
if (!logoStage) {
20-
return;
21-
}
22-
23-
const maxTilt = 12;
24-
25-
const reset = () => {
26-
logoStage.style.transform = "rotateX(0deg) rotateY(0deg)";
17+
const onScroll = () => {
18+
if (rafId) {
19+
return;
20+
}
21+
rafId = window.requestAnimationFrame(setWorldLogoTransform);
2722
};
2823

29-
logoStage.addEventListener("pointermove", (event) => {
30-
const rect = logoStage.getBoundingClientRect();
31-
const x = (event.clientX - rect.left) / rect.width;
32-
const y = (event.clientY - rect.top) / rect.height;
33-
34-
const rotateY = (x - 0.5) * (maxTilt * 2);
35-
const rotateX = (0.5 - y) * (maxTilt * 2);
36-
37-
logoStage.style.transform = `rotateX(${rotateX.toFixed(2)}deg) rotateY(${rotateY.toFixed(2)}deg)`;
38-
});
39-
40-
logoStage.addEventListener("pointerleave", reset);
41-
logoStage.addEventListener("pointercancel", reset);
24+
setWorldLogoTransform();
25+
window.addEventListener("scroll", onScroll, { passive: true });
4226
})();

site/styles.css

Lines changed: 6 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ body {
1717
margin: 0;
1818
padding: 0;
1919
min-height: 100%;
20+
background: #05070d;
21+
overscroll-behavior: none;
2022
}
2123

2224
body {
@@ -38,16 +40,17 @@ body {
3840
transform-origin: center;
3941
z-index: -4;
4042
pointer-events: none;
41-
opacity: 0.26;
42-
filter: drop-shadow(0 28px 70px rgba(0, 0, 0, 0.55));
43+
opacity: 0.42;
44+
mix-blend-mode: screen;
4345
will-change: transform;
4446
}
4547

4648
.world-logo img {
4749
width: 100%;
4850
height: 100%;
4951
display: block;
50-
object-fit: contain;
52+
object-fit: cover;
53+
border-radius: 50%;
5154
}
5255

5356
.noise {
@@ -124,13 +127,6 @@ main {
124127
padding-top: 40px;
125128
}
126129

127-
.hero-grid {
128-
display: grid;
129-
grid-template-columns: minmax(0, 1fr) minmax(280px, 460px);
130-
gap: 28px;
131-
align-items: center;
132-
}
133-
134130
.kicker {
135131
margin: 0 0 12px;
136132
font-family: "IBM Plex Mono", monospace;
@@ -156,74 +152,6 @@ h1 {
156152
line-height: 1.55;
157153
}
158154

159-
.hero-visual {
160-
display: grid;
161-
place-items: center;
162-
}
163-
164-
.logo-stage {
165-
position: relative;
166-
width: min(80vw, 440px);
167-
aspect-ratio: 1;
168-
display: grid;
169-
place-items: center;
170-
transform-style: preserve-3d;
171-
transition: transform 150ms ease-out;
172-
}
173-
174-
.halo {
175-
position: absolute;
176-
inset: 14%;
177-
border-radius: 999px;
178-
background: radial-gradient(circle, rgba(255, 168, 0, 0.55) 0%, rgba(255, 138, 0, 0.02) 70%);
179-
filter: blur(28px);
180-
animation: pulseHalo 2.8s ease-in-out infinite;
181-
}
182-
183-
.logo-orb {
184-
position: relative;
185-
width: 76%;
186-
aspect-ratio: 1;
187-
border-radius: 999px;
188-
overflow: hidden;
189-
box-shadow: 0 26px 60px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(255, 255, 255, 0.15);
190-
transform: translateZ(42px);
191-
}
192-
193-
.logo-orb img {
194-
display: block;
195-
width: 100%;
196-
height: 100%;
197-
object-fit: cover;
198-
}
199-
200-
.scanline {
201-
position: absolute;
202-
inset: 8% 6%;
203-
border-radius: 999px;
204-
background: linear-gradient(
205-
to bottom,
206-
transparent 0%,
207-
rgba(255, 255, 255, 0.18) 48%,
208-
rgba(255, 255, 255, 0.02) 55%,
209-
transparent 100%
210-
);
211-
mix-blend-mode: screen;
212-
transform: translateY(-38%);
213-
animation: sweep 3.4s ease-in-out infinite;
214-
pointer-events: none;
215-
}
216-
217-
.logo-label {
218-
position: absolute;
219-
bottom: 4%;
220-
font-family: "IBM Plex Mono", monospace;
221-
font-size: 12px;
222-
letter-spacing: 0.2em;
223-
color: rgba(255, 255, 255, 0.85);
224-
text-transform: uppercase;
225-
transform: translateZ(34px);
226-
}
227155

228156
.cta-row {
229157
margin-top: 28px;
@@ -320,49 +248,12 @@ footer a {
320248
text-decoration: none;
321249
}
322250

323-
@keyframes pulseHalo {
324-
0%,
325-
100% {
326-
transform: scale(0.96);
327-
opacity: 0.44;
328-
}
329-
50% {
330-
transform: scale(1.04);
331-
opacity: 0.68;
332-
}
333-
}
334-
335-
@keyframes sweep {
336-
0%,
337-
100% {
338-
transform: translateY(-34%);
339-
opacity: 0.52;
340-
}
341-
50% {
342-
transform: translateY(34%);
343-
opacity: 0.26;
344-
}
345-
}
346-
347251
@media (max-width: 840px) {
348252
.world-logo {
349253
width: min(132vmin, 900px);
350254
opacity: 0.2;
351255
}
352256

353-
.hero-grid {
354-
grid-template-columns: 1fr;
355-
gap: 18px;
356-
}
357-
358-
.hero-visual {
359-
order: -1;
360-
}
361-
362-
.logo-stage {
363-
width: min(88vw, 360px);
364-
}
365-
366257
.cards {
367258
grid-template-columns: 1fr;
368259
}

0 commit comments

Comments
 (0)