/* Entrance animations & transitions layered on top of site.css */
:root { --m-ease: cubic-bezier(.16,1,.3,1); }

@keyframes m-rise { from { opacity:0; transform:translateY(60px) skewY(4deg); } to { opacity:1; transform:none; } }
@keyframes m-fade { from { opacity:0; } to { opacity:1; } }
@keyframes m-down { from { opacity:0; transform:translateY(-100%); } to { opacity:1; transform:none; } }
@keyframes m-zoom { from { transform:scale(1.18); filter:blur(8px); } to { transform:scale(1); filter:none; } }
@keyframes m-spin-in { from { opacity:0; transform:rotate(-180deg) scale(.3); } to { opacity:1; transform:none; } }
@keyframes m-curtain { from { transform:scaleY(1); } to { transform:scaleY(0); } }

/* Page curtain */
.m-curtain { position:fixed; inset:0; z-index:9999; background:#d7f550; transform-origin:top;
  animation:m-curtain 1s var(--m-ease) .15s forwards; pointer-events:none; }

/* Hero load sequence */
.site-header { animation:m-down .9s var(--m-ease) .7s both; }
.hero-image.active { animation:m-zoom 2.2s var(--m-ease) .5s both; }
.hero-topline { animation:m-fade 1s ease 1.1s both; }
.hero-pretitle { animation:m-rise 1s var(--m-ease) 1s both; }
.hero h1 .name-line { display:block; animation:m-rise 1.2s var(--m-ease) both; }
.hero h1 .name-line:first-child { animation-delay:.9s; }
.hero h1 .name-line.second { animation-delay:1.05s; }
.hero .name-star { display:inline-block; animation:m-spin-in 1.4s var(--m-ease) 1.4s both; }
.hero-description { animation:m-rise 1s var(--m-ease) 1.35s both; }
.orbit-link { animation:m-spin-in 1.2s var(--m-ease) 1.5s both; }
.hero-side, .hero-footer { animation:m-fade 1s ease 1.7s both; }

/* Scroll reveals */
.m-reveal { opacity:0; transform:translateY(40px); transition:opacity 1s var(--m-ease), transform 1s var(--m-ease); transition-delay:var(--d,0s); }
.m-reveal.m-in { opacity:1; transform:none; }
.m-clip img { clip-path:inset(100% 0 0 0); transform:scale(1.25); transition:clip-path 1.3s var(--m-ease), transform 1.6s var(--m-ease) !important; }
.m-clip.m-in img { clip-path:inset(0 0 0 0); }
.m-clip.m-in img { transform:scale(1); }

/* Transitions */
a, button { transition:color .3s ease, background-color .3s ease, border-color .3s ease, transform .4s var(--m-ease), opacity .3s ease; }
.pill-button:hover, .header-contact:hover { transform:translateY(-3px); }
.pill-button:active { transform:scale(.97); }
.portrait-frame img, .split-photo img, .gallery-track img { transition:transform 1s var(--m-ease), filter .6s ease; }
.portrait-frame:hover img, .split-photo:hover img, .gallery-track figure:hover img, .gallery-track button:hover img { transform:scale(1.06); }
.hero-image { transition:opacity 1.2s ease, transform 1.6s var(--m-ease) !important; }
.desktop-nav a { position:relative; }
.desktop-nav a::after { content:""; position:absolute; left:0; right:0; bottom:-6px; height:1px; background:currentColor; transform:scaleX(0); transform-origin:right; transition:transform .5s var(--m-ease); }
.desktop-nav a:hover::after { transform:scaleX(1); transform-origin:left; }
dialog[open] { animation:m-rise .7s var(--m-ease) both; }
dialog::backdrop { animation:m-fade .5s ease both; }
html { scroll-behavior:smooth; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation:none !important; transition:none !important; }
  .m-curtain { display:none; }
  .m-reveal, .m-clip { opacity:1; transform:none; clip-path:none; }
  .m-clip img { transform:none; clip-path:none; }
}
