feat: logo-pulse with pink->green color transition (#16)
* fix(pulse): split halves now meet simultaneously + no backtracking Two bugs fixed after Linus feedback: 1. Path-form: top/bottom split halves used Bezier curves that could loop back on themselves when entry.x lay outside box X-range. Now use clamped startX/endX (max(xL+r, min(xR-r, entry.x))) so pathen alltid rör sig framåt (entry.x → exit.x), aldrig vänder. 2. Synchronized meeting: previously each blob moved at fixed velocity along its own path → shorter path arrived first and waited. Now both blobs share a phase2T (0→1) progress fraction, so they meet at exit-point simultaneously. The path with different length simply moves at a slightly different speed (averaged). Phase2 duration based on avg(topLen,bottomLen)/velocity so total animation time stays consistent. * feat: logo-pulse with pink->green color transition Adds a 4th pulse target: the IMAGES BY OLOFSSON hero-text logo. 20% chance per pulse-slot when logo is visible (footer scrolled in). Flow: 1. New purple wave-thread on bottom-left (mirror of cyan wave1 on right) 2. Pulse glides in along purple thread to logo-left edge 3. Pulse enters logo + tints smoky-path stroke pink (#e879f9) + adds pink text-shadow halo on h1 4. Mid-passage: tint transitions to green (#4fd1c5) — matches default smoke + cyan glow 5. Pulse exits logo via wave1 (existing cyan thread on right) 6. Logo tint reverts to default (white smokeShift animation) CSS-side: data-logo-tint attribute on #text-wrapper drives stroke + text-shadow overrides with 0.6-0.8s transitions for smooth fade.
This commit is contained in:
+30
-2
@@ -14,8 +14,8 @@ import WaveBackground from '../components/WaveBackground.astro';
|
||||
<div id="hero-text" class="fixed top-0 left-0 w-full h-screen flex flex-col items-center justify-center z-10 pointer-events-none opacity-0 transition-all duration-700 ease-in-out">
|
||||
|
||||
<div class="text-center animated-text-container relative">
|
||||
|
||||
<div id="text-wrapper" class="inline-block relative p-6 transition-all duration-500">
|
||||
|
||||
<div id="text-wrapper" data-logo-target class="inline-block relative p-6 transition-all duration-500">
|
||||
|
||||
<h1 class="text-5xl md:text-8xl font-black text-white tracking-tighter leading-none drop-shadow-[0_0_10px_rgba(34,211,238,0.4)] relative z-10">
|
||||
IMAGES BY <br/> OLOFSSON
|
||||
@@ -108,6 +108,7 @@ import WaveBackground from '../components/WaveBackground.astro';
|
||||
}
|
||||
.smoky-path {
|
||||
animation: drawPath 6s cubic-bezier(0.4, 0, 0.2, 1) infinite, smokeShift 10s ease-in-out infinite alternate;
|
||||
transition: stroke 0.8s ease, filter 0.8s ease;
|
||||
}
|
||||
@keyframes smokeShift {
|
||||
0% { stroke: #374151; }
|
||||
@@ -116,6 +117,33 @@ import WaveBackground from '../components/WaveBackground.astro';
|
||||
100% { stroke: #1f2937; }
|
||||
}
|
||||
|
||||
/* Logo-pulse: när data-attribut sätts på text-wrapper, override:a stroke + drop-shadow */
|
||||
#text-wrapper[data-logo-tint="pink"] ~ * .smoky-path,
|
||||
#text-wrapper[data-logo-tint="pink"] .smoky-path {
|
||||
animation: none !important;
|
||||
stroke: #e879f9 !important;
|
||||
opacity: 0.95 !important;
|
||||
filter: url(#fog-filter) drop-shadow(0 0 12px rgba(232,121,249,0.7));
|
||||
}
|
||||
#text-wrapper[data-logo-tint="green"] ~ * .smoky-path,
|
||||
#text-wrapper[data-logo-tint="green"] .smoky-path {
|
||||
animation: none !important;
|
||||
stroke: #4fd1c5 !important;
|
||||
opacity: 0.95 !important;
|
||||
filter: url(#fog-filter) drop-shadow(0 0 12px rgba(79,209,197,0.7));
|
||||
}
|
||||
#text-wrapper[data-logo-tint="pink"] h1 {
|
||||
text-shadow: 0 0 25px rgba(232,121,249,0.85), 0 0 50px rgba(232,121,249,0.55);
|
||||
transition: text-shadow 0.6s ease;
|
||||
}
|
||||
#text-wrapper[data-logo-tint="green"] h1 {
|
||||
text-shadow: 0 0 25px rgba(79,209,197,0.85), 0 0 50px rgba(79,209,197,0.55);
|
||||
transition: text-shadow 0.6s ease;
|
||||
}
|
||||
#text-wrapper h1 {
|
||||
transition: text-shadow 0.8s ease;
|
||||
}
|
||||
|
||||
/* --- BRACKETS (Hörnen) --- */
|
||||
#text-wrapper::before,
|
||||
#text-wrapper::after {
|
||||
|
||||
Reference in New Issue
Block a user