/* Small, finite movements; artwork stays in focus. */
@keyframes arrive{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}
@keyframes image-settle{from{transform:scale(1.035)}to{transform:scale(1)}}
@keyframes viewer-arrive{from{opacity:0;transform:translateY(8px) scale(.992)}to{opacity:1;transform:translateY(0) scale(1)}}
.hero-top{animation:arrive .6s ease-out both}.hero h1{animation:arrive .85s cubic-bezier(.2,.65,.3,1) .1s both}.hero-stage{animation:arrive .9s cubic-bezier(.2,.65,.3,1) .2s both}.hero-stage>img{animation:image-settle 2.8s cubic-bezier(.2,.65,.3,1) both}.hero-bottom{animation:arrive .8s ease-out .35s both}
.reveal-ready{opacity:0;transform:translateY(22px);transition:opacity .65s ease-out var(--reveal-delay,0ms),transform .75s cubic-bezier(.2,.65,.3,1) var(--reveal-delay,0ms)}.reveal-ready.is-visible{opacity:1;transform:translateY(0)}
.project-image{isolation:isolate}.project-image .open-indicator{z-index:3;transition:transform .3s ease,background .3s ease}.project-open:hover .open-indicator{transform:translate(2px,-2px)}.project-meta h3{transition:color .25s ease}.project-open:hover h3{color:var(--accent)}.hover-film{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .4s ease;pointer-events:none;z-index:1}.hover-film.is-playing{opacity:1}
.filter,.more,.viewer-close,.hero-link{transition:background .25s ease,color .25s ease,border-color .25s ease,transform .25s ease}.more:hover,.hero-link:hover{transform:translateY(-2px)}.hero-link>span{display:inline-block;transition:transform .25s ease}.hero-link:hover>span{transform:translate(2px,-2px)}.topbar nav a{position:relative;transition:color .2s ease}.topbar nav a:not(.contact-nav):after{content:'';position:absolute;bottom:-6px;left:0;width:100%;height:1px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .25s ease}.topbar nav a:hover:after{transform:scaleX(1)}.viewer[open]{animation:viewer-arrive .25s ease-out}.thumb{transition:opacity .2s ease,border-color .2s ease}.email{transition:color .25s ease,border-color .25s ease}.email:hover{border-color:var(--accent)}
@media(prefers-reduced-motion:reduce){.hero-top,.hero h1,.hero-stage,.hero-stage>img,.hero-bottom,.viewer[open]{animation:none!important}.reveal-ready{opacity:1!important;transform:none!important;transition:none!important}.hover-film{display:none}.more:hover,.hero-link:hover,.project-open:hover .open-indicator{transform:none}.project-open:hover .project-image img{transform:none}}
