/* Shared motion stays short, subtle, and independent of the page content. */
:root{--ease-out:cubic-bezier(.22,1,.36,1);--ease-soft:cubic-bezier(.2,.65,.3,1);--motion-fast:160ms;--motion-base:260ms;--motion-slow:440ms}
html{scrollbar-gutter:stable}
body,.site-header,.site-footer,.sidebar-card,.project-card,.paper-card,.feature-note,.highlight-card,.course-overview,.research-feature,.work-entry,.coverage-card,.press-spotlight{transition:background-color var(--motion-base) ease,color var(--motion-base) ease,border-color var(--motion-base) ease,box-shadow var(--motion-base) ease,transform var(--motion-base) var(--ease-out)}
a,button,summary,.photo-card h3{transition:color var(--motion-fast) ease,background-color var(--motion-fast) ease,border-color var(--motion-fast) ease,opacity var(--motion-fast) ease,transform var(--motion-base) var(--ease-out),box-shadow var(--motion-base) ease}
.desktop-nav a:after{content:"";position:absolute;bottom:0;left:0;right:0;height:2px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform var(--motion-base) var(--ease-out)}
.desktop-nav a.active:after,.desktop-nav a:focus-visible:after{transform:scaleX(1)}
.social-tooltip{transition:opacity var(--motion-fast) ease}
.section-link .icon,.resource-link .icon,.press-primary-link>.icon:last-child,.photo-explore>span,.photo-hero-expand>svg,.module-slide-link>.icon:last-child{transition:transform var(--motion-base) var(--ease-out)}
.coverage-image img,.photo-image-wrap img,.press-spotlight-cover img{transition:transform 600ms var(--ease-out)}
.work-toggle-icon:after{transition:transform var(--motion-base) var(--ease-out)}
.paper-disclosure[open]>.paper-expanded-panel{animation:none}
.paper-disclosure-symbol{transition:background-color var(--motion-base) ease,color var(--motion-base) ease}
.motion-height{overflow:hidden!important;overflow:clip!important;overflow-anchor:none}
.photo-viewer-stage img{transition:opacity 220ms ease}
.photo-viewer[open]::backdrop{animation:soft-fade-in 220ms ease both}
@keyframes soft-fade-in{from{opacity:0}to{opacity:1}}
@media(hover:hover) and (prefers-reduced-motion:no-preference){
  .desktop-nav a:hover:after{transform:scaleX(1)}
  .project-card:hover,.paper-card:hover,.feature-note:hover,.coverage-card:hover{transform:translateY(-3px);border-color:var(--accent);box-shadow:0 9px 25px #1018280b}
  .work-entry:hover{transform:translateY(-2px)}
  .work-entry[open]:hover{transform:none}
  .profile-links>a:hover,.icon-button:hover{transform:translateY(-2px)}
  .section-link:hover .icon,.press-primary-link:hover>.icon:last-child,.module-slide-link:hover>.icon:last-child{transform:translateX(3px)}
  .photo-explore:hover>span{transform:translateY(3px)}
  .press-spotlight-cover:hover img{transform:scale(1.015)}
}
@media(prefers-reduced-motion:no-preference){
  button:active,.button:active,.resource-link:active,.photo-filters button:active{transform:scale(.97)}
  @view-transition{navigation:auto}
  .site-header{view-transition-name:site-header}
  ::view-transition-old(root){animation:page-fade-out 160ms ease both}
  ::view-transition-new(root){animation:page-fade-in 300ms var(--ease-out) both}
  ::view-transition-group(site-header){animation:none}
  ::view-transition-old(site-header){animation:none;opacity:0}
  ::view-transition-new(site-header){animation:none}
}
@keyframes page-fade-out{to{opacity:0}}
@keyframes page-fade-in{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}}
