feat(showcase): dramatic 3D cascade entry — tiles tip back then settle into place
Replaced the subtle 12px fade with a perspective rotateX(-28deg) tilt that flips up and settles flat with a slight overshoot, staggered 70ms so tiles cascade in one at a time. Makes the showcase read as an experience rather than a quiet fade. Tunable (tilt/stagger/duration); reduced-motion safe. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -117,22 +117,35 @@ onUnmounted(() => observer && observer.disconnect())
|
|||||||
}
|
}
|
||||||
.fc-masonry__end { text-align: center; padding: 32px 0; }
|
.fc-masonry__end { text-align: center; padding: 32px 0; }
|
||||||
|
|
||||||
/* IR-parity stagger fade-in for showcase entry / shuffle. 60ms between
|
/* Cascade entry: each tile flips up out of a backward tilt and settles
|
||||||
items, 250ms each — matches IR's `itemFadeIn` keyframe (style.css
|
into place, one at a time — more pronounced than a plain fade so the
|
||||||
~line 1834). Honors prefers-reduced-motion. */
|
showcase reads as an "experience" (operator-flagged 2026-05-28). The
|
||||||
|
`both` fill holds the hidden/tilted 0% state until each tile's staggered
|
||||||
|
turn; the cubic-bezier overshoots slightly past flat then settles.
|
||||||
|
Honors prefers-reduced-motion. Tunables: tilt (-28deg), stagger (70ms),
|
||||||
|
duration (0.6s). */
|
||||||
@keyframes fc-masonry-item-in {
|
@keyframes fc-masonry-item-in {
|
||||||
from { opacity: 0; transform: translateY(12px); }
|
0% {
|
||||||
to { opacity: 1; transform: translateY(0); }
|
opacity: 0;
|
||||||
|
transform: perspective(1000px) rotateX(-28deg) translateY(26px) scale(0.95);
|
||||||
|
}
|
||||||
|
55% { opacity: 1; }
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
transform: perspective(1000px) rotateX(0deg) translateY(0) scale(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.fc-masonry__item--anim {
|
.fc-masonry__item--anim {
|
||||||
animation: fc-masonry-item-in 0.25s ease forwards;
|
transform-origin: center top;
|
||||||
animation-delay: calc(var(--stagger-index, 0) * 60ms);
|
backface-visibility: hidden;
|
||||||
opacity: 0;
|
animation: fc-masonry-item-in 0.6s cubic-bezier(0.34, 1.45, 0.64, 1) both;
|
||||||
|
animation-delay: calc(var(--stagger-index, 0) * 70ms);
|
||||||
}
|
}
|
||||||
@media (prefers-reduced-motion: reduce) {
|
@media (prefers-reduced-motion: reduce) {
|
||||||
.fc-masonry__item--anim {
|
.fc-masonry__item--anim {
|
||||||
animation: none;
|
animation: none;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
|
transform: none;
|
||||||
}
|
}
|
||||||
.fc-masonry__item img { transition: none; }
|
.fc-masonry__item img { transition: none; }
|
||||||
.fc-masonry__item:hover img { transform: none; }
|
.fc-masonry__item:hover img { transform: none; }
|
||||||
|
|||||||
Reference in New Issue
Block a user