feat(site): smoother motion across the landing pages
CI / check (push) Successful in 2m27s
CI / deploy (push) Successful in 1m19s
CI / publish-container (push) Successful in 1m4s

- Slow Ken Burns drift on the hero artwork for cinematic depth.
- Gentle breathing pulse on the brand glows behind Frank and the hero.
- Silkier reveal easing (cubic-bezier .22/1/.36/1, 0.55s) site-wide.
- Eased, longer hover transitions on the hero CTAs.
- Smooth page scrolling, all guarded by prefers-reduced-motion.
This commit is contained in:
openhands committed 2026-09-12 16:51:48 +02:00
1 parent bf5b9918d9
commit efd3b00075
3 files changed
+49 -3

No files matched your search

+3 -2
View File
@@ -228,6 +228,7 @@ export default async function Home() {
fill
priority
sizes="100vw"
className="ken-burns"
style={{ objectFit: "cover", objectPosition: "center 20%" }}
/>
<div
@@ -290,7 +291,7 @@ export default async function Home() {
<div className="flex flex-wrap gap-2.5 sm:gap-3 justify-center">
<Link
href="/register"
className="btn-shine inline-flex items-center gap-2 sm:gap-2.5 font-extrabold text-xs sm:text-sm px-5 sm:px-8 py-3 sm:py-4 rounded-xl transition-all duration-200 hover:scale-[1.03] active:scale-95 shadow-lg"
className="btn-shine inline-flex items-center gap-2 sm:gap-2.5 font-extrabold text-xs sm:text-sm px-5 sm:px-8 py-3 sm:py-4 rounded-xl transition-all duration-300 ease-out hover:scale-[1.03] active:scale-95 shadow-lg"
style={{
background: "var(--color-primary)",
color: "var(--color-primary-foreground)",
@@ -309,7 +310,7 @@ export default async function Home() {
</Link>
<Link
href="/login"
className="inline-flex items-center gap-2 font-bold text-xs sm:text-sm px-5 sm:px-8 py-3 sm:py-4 rounded-xl border-2 transition-all duration-200 hover:scale-[1.03] active:scale-95 backdrop-blur-sm"
className="inline-flex items-center gap-2 font-bold text-xs sm:text-sm px-5 sm:px-8 py-3 sm:py-4 rounded-xl border-2 transition-all duration-300 ease-out hover:scale-[1.03] active:scale-95 backdrop-blur-sm"
style={{
borderColor:
"color-mix(in srgb, var(--color-text-muted) 20%, transparent)",
+45
View File
@@ -2083,3 +2083,48 @@ details[open] > summary .details-open\:rotate-180 {
font-weight: 900;
letter-spacing: -0.02em;
}
/* ── Smooth motion (landing) ───────────────────────────────────────── */
html {
scroll-behavior: smooth;
}
/* Soft, slow drift for hero artwork (Ken Burns). */
.ken-burns {
animation: ken-burns 20s ease-in-out infinite alternate;
will-change: transform;
}
@keyframes ken-burns {
from {
transform: scale(1.02) translateY(0);
}
to {
transform: scale(1.08) translateY(-1.5%);
}
}
/* Gentle breathing pulse for the brand glows behind Frank / the hero. */
.brand-halo {
animation: hero-halo-pulse 6s ease-in-out infinite;
}
@keyframes hero-halo-pulse {
0%,
100% {
opacity: 0.55;
transform: scale(1);
}
50% {
opacity: 0.9;
transform: scale(1.07);
}
}
@media (prefers-reduced-motion: reduce) {
html {
scroll-behavior: auto;
}
.ken-burns,
.brand-halo {
animation: none;
}
}
+1 -1
View File
@@ -18,7 +18,7 @@ export function Reveal({ children, className, delay = 0 }: RevealProps) {
initial={{ opacity: 0, y: prefersReducedMotion ? 0 : 24 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true, margin: "-40px" }}
transition={{ duration: 0.45, delay, ease: [0.25, 0.1, 0.25, 1] }}
transition={{ duration: 0.55, delay, ease: [0.22, 1, 0.36, 1] }}
>
{children}
</motion.div>