diff --git a/apps/web/src/app/globals.css b/apps/web/src/app/globals.css index fe51f43..7ca34cf 100644 --- a/apps/web/src/app/globals.css +++ b/apps/web/src/app/globals.css @@ -227,4 +227,9 @@ transition-duration: 0.01ms !important; scroll-behavior: auto !important; } -} \ No newline at end of file +} + +/* Splash logo zoom on click-to-enter (CSS, so the logo needs no framer-motion + wrapper and stays a clean LCP candidate). */ +@keyframes splash-zoom { 0% { transform: scale(1); } 50% { transform: scale(1.06); } 100% { transform: scale(1.14); } } +.splash-zoom { animation: splash-zoom 0.8s ease-in-out forwards; } \ No newline at end of file diff --git a/apps/web/src/components/landing/hero-splash.tsx b/apps/web/src/components/landing/hero-splash.tsx index 155347a..daf7ee5 100644 --- a/apps/web/src/components/landing/hero-splash.tsx +++ b/apps/web/src/components/landing/hero-splash.tsx @@ -104,18 +104,19 @@ export function HeroSplash({ onEnter, sectionRef, leaving }: { onEnter: () => vo className="pointer-events-none absolute h-[120%] w-[120%] rounded-full bg-[radial-gradient(circle,rgba(34,211,238,0.2),transparent_65%)] motion-safe:animate-pulse" style={{ animationDuration: "4.5s" }} /> - Such Software - + {/* Cover text hidden on mobile (logo + corner icons carry it there); fades out on enter */} diff --git a/packages/ui/src/procedural/nebula-field.tsx b/packages/ui/src/procedural/nebula-field.tsx index 6380521..6ae99a0 100644 --- a/packages/ui/src/procedural/nebula-field.tsx +++ b/packages/ui/src/procedural/nebula-field.tsx @@ -95,8 +95,8 @@ export const NebulaField = ({ className, density = 8, themeMode = 'dark', positi // Aim the streamers at the monitor's screen. +2.5 hit low-and-right; -1/-1.5 hit // high-and-left, so this is the midpoint. Tweak these two offsets to move the // convergence point. - const targetX = computerX + 0.5; - const targetY = computerY + 0.5; + const targetX = computerX + 1.5; + const targetY = computerY + 1.5; // Check for reduced motion preference useEffect(() => {