/* Unified motion: animate content, never the article's fit/centering transform. */
.slide.fitted.motion-ready > .slide-head{animation:presentation-heading-in .48s cubic-bezier(.2,.7,.2,1) both}
.slide.fitted.motion-ready > .slide-body{animation:presentation-page-in .42s ease-out both}
.slide.fitted .motion-reveal{animation:presentation-card-in .6s cubic-bezier(.2,.7,.2,1) both;animation-delay:var(--enter-delay,0ms)}
.slide.fitted .cover-content > *{animation:presentation-heading-in .7s cubic-bezier(.2,.7,.2,1) both}
.slide.fitted .cover-content > :nth-child(2){animation-delay:90ms}
.slide.fitted .cover-content > :nth-child(3){animation-delay:180ms}
.slide.fitted .cover-content > :nth-child(n+4){animation-delay:260ms}

.motion-edge{position:absolute;inset:0;z-index:2;overflow:hidden;border-radius:inherit;pointer-events:none}
.motion-edge::before,.motion-edge::after,.motion-frame-pseudo::after{content:'';position:absolute;pointer-events:none;height:2px;width:32%;background:linear-gradient(90deg,transparent,var(--gold),#fff2d9,var(--blue),transparent);opacity:0;animation:presentation-edge-pass 12s linear infinite;animation-delay:var(--edge-delay,0s)}
.motion-edge::before{top:0;left:0}
.motion-edge::after{right:0;bottom:0;animation-direction:reverse;animation-delay:calc(var(--edge-delay,0s) - 6s)}
.motion-frame-pseudo::after{top:0;left:4%;z-index:2;max-width:30%;border-radius:99px;animation-name:presentation-frame-pass}
.board-overview .motion-frame-pseudo::after{height:2px;animation-duration:17s;filter:none}

/* Existing arrow glyphs stay fixed while light travels along the connection. */
.motion-transfer{position:relative}
.motion-transfer::after{content:'';position:absolute;left:-6px;top:50%;width:8px;height:2px;border-radius:99px;background:var(--gold);box-shadow:0 0 6px 1px rgba(244,217,175,.65);opacity:0;animation:presentation-transfer 4.8s ease-in-out infinite;animation-delay:var(--signal-delay,0s);pointer-events:none}
.slide.fitted .motion-node{animation:presentation-node-pulse 4.8s ease-in-out infinite;animation-delay:var(--signal-delay,0s)}
.slide.fitted .token-bar > .motion-chart{transform-origin:left center;animation:presentation-bar-x .85s cubic-bezier(.2,.7,.2,1) both;animation-delay:var(--enter-delay,0ms);position:relative;overflow:hidden}
.token-bar > .motion-chart::after{content:'';position:absolute;inset:0;width:45%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.8),transparent);animation:presentation-bar-shine 8s ease-in-out infinite;animation-delay:var(--enter-delay,0ms);pointer-events:none}
.slide.fitted .hl-overview-chart .motion-chart{transform-origin:center bottom;animation:presentation-bar-y .85s cubic-bezier(.2,.7,.2,1) both;animation-delay:var(--enter-delay,0ms)}

/* Navigation and overlays share the same short, calm response. */
.deck-switch button,.board-mode-switch button,.toolbar button,.pager button,.cover-cta,.hl-comparison-open{transition:background .22s ease,border-color .22s ease,box-shadow .22s ease,translate .22s ease}
.pager button:active:not(:disabled),.toolbar button:active,.cover-cta:active{translate:0 1px}
.pager button svg{transition:translate .22s ease}
.pager #next:not(:disabled):hover svg{translate:3px 0}
.pager #previous:not(:disabled):hover svg{translate:-3px 0}
.outline-backdrop:not([hidden]) .outline-panel,dialog[open]{animation:presentation-overlay-in .28s ease-out both}
dialog[open]::backdrop{animation:presentation-page-in .25s ease-out both}
@media(hover:hover){
 .research-cover-trigger,.manuscript-trigger{transition:translate .25s ease,box-shadow .25s ease}
 .research-cover-trigger:hover,.manuscript-trigger:hover{translate:0 -3px;box-shadow:0 8px 30px rgba(168,216,255,.22)}
 .board-table tbody tr,.data-table tbody tr{transition:background-color .2s ease}
 .board-table tbody tr:hover,.data-table tbody tr:hover{background-color:rgba(168,216,255,.07)}
}

@keyframes presentation-heading-in{from{opacity:0;translate:0 10px}to{opacity:1;translate:0 0}}
@keyframes presentation-page-in{from{opacity:0}to{opacity:1}}
@keyframes presentation-card-in{from{opacity:0;translate:0 8px}to{opacity:1;translate:0 0}}
@keyframes presentation-overlay-in{from{opacity:0;translate:0 8px}to{opacity:1;translate:0 0}}
@keyframes presentation-edge-pass{0%{opacity:0;transform:translateX(-110%)}8%{opacity:.65}65%{opacity:.65}78%,100%{opacity:0;transform:translateX(335%)}}
@keyframes presentation-frame-pass{0%{opacity:0;transform:translateX(0)}8%{opacity:.65}65%{opacity:.65}78%,100%{opacity:0;transform:translateX(205%)}}
@keyframes presentation-transfer{0%,14%{opacity:0;transform:translateX(0)}20%{opacity:1}54%{opacity:1}65%,100%{opacity:0;transform:translateX(27px)}}
@keyframes presentation-node-pulse{0%,12%,65%,100%{border-color:rgba(175,204,234,.25);box-shadow:inset 0 0 0 transparent}25%,40%{border-color:rgba(244,217,175,.62);box-shadow:inset 0 0 18px rgba(168,216,255,.07)}}
@keyframes presentation-bar-x{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes presentation-bar-y{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@keyframes presentation-bar-shine{0%,24%{opacity:0;transform:translateX(-110%)}30%{opacity:.8}55%{opacity:.8}65%,100%{opacity:0;transform:translateX(330%)}}

@media(max-width:900px){
 /* The mobile footer already spans the viewport; contain its decorative wash. */
 .bottom-bar::before{inset:0}
 .motion-edge::before,.motion-edge::after{animation-duration:16s}
 .slide.fitted .motion-reveal{animation-duration:.45s}
}
/* One control covers both the new effects and the existing diagram effects. */
.motion-off *,.motion-off *::before,.motion-off *::after{animation:none!important;transition:none!important}
.motion-off .motion-edge,.motion-off .motion-frame-pseudo::after,.motion-off .motion-transfer::after,.motion-off .motion-chart::after{opacity:0!important}
.motion-paused *,.motion-paused *::before,.motion-paused *::after{animation-play-state:paused!important}
@media(prefers-reduced-motion:reduce){
 *,*::before,*::after{animation:none!important;transition:none!important}
 .motion-edge,.motion-frame-pseudo::after,.motion-transfer::after,.motion-chart::after{opacity:0!important}
}
