/* Richer entrances for both homepage concepts, without altering normal scrolling. */
.category-card.entrance{clip-path:inset(0 0 100% 0);translate:0 0;scale:1;transition:clip-path .95s cubic-bezier(.22,1,.36,1) var(--entrance-delay,0ms),opacity .5s ease var(--entrance-delay,0ms)}
.category-card.entrance.entered{clip-path:inset(0)}
.category-card.entrance.entered img{animation:card-focus 1.15s cubic-bezier(.22,1,.36,1) both var(--entrance-delay,0ms)}

[data-reveal="content"].is-revealed h2,[data-reveal="content"].is-revealed h3{animation:title-sharpen .85s cubic-bezier(.22,1,.36,1) both var(--reveal-delay,0ms)}
[data-reveal="numbers"].is-revealed span{animation:number-pop .7s cubic-bezier(.22,1,.36,1) both var(--reveal-delay,0ms)}
.masonry-card[data-reveal].is-revealed img{animation:card-focus 1.1s cubic-bezier(.22,1,.36,1) both var(--reveal-delay,0ms)}
.service-card[data-reveal].is-revealed .service-visual,.feature-grid[data-reveal].is-revealed .feature-image{animation:image-sweep 1s cubic-bezier(.22,1,.36,1) both var(--reveal-delay,0ms)}

@keyframes card-focus{from{transform:scale(1.15);filter:brightness(.58)}to{transform:scale(1);filter:brightness(1)}}
@keyframes image-sweep{from{clip-path:inset(0 100% 0 0);transform:scale(1.08)}to{clip-path:inset(0);transform:scale(1)}}
@keyframes title-sharpen{from{letter-spacing:-.11em;filter:blur(8px)}to{letter-spacing:inherit;filter:blur(0)}}
@keyframes number-pop{0%{opacity:0;transform:translateY(18px) scale(.8)}65%{opacity:1;transform:translateY(-3px) scale(1.06)}100%{transform:none}}
@media(prefers-reduced-motion:reduce){.category-card.entrance{clip-path:none}.category-card.entrance.entered img,[data-reveal="content"].is-revealed h2,[data-reveal="content"].is-revealed h3,[data-reveal="numbers"].is-revealed span,.masonry-card[data-reveal].is-revealed img,.service-card[data-reveal].is-revealed .service-visual,.feature-grid[data-reveal].is-revealed .feature-image{animation:none}}
