/* Different events leave different traces: a line, mist, a lifted plane and glass. */
.entrances-ready [data-enter]{--enter-delay:calc(var(--enter-index,0)*65ms)}
.entrances-ready [data-enter]:not(.entered){opacity:0}
.entrances-ready [data-enter="trace"]:not(.entered){filter:blur(5px);clip-path:inset(0 95% 0 0);transform:translateX(-11px)}
.entrances-ready [data-enter="mist"]:not(.entered){filter:blur(14px);transform:translate3d(12px,17px,0) scale(.985)}
.entrances-ready [data-enter="glass"]:not(.entered){filter:blur(8px);clip-path:inset(8% 0 8% 0 round 22px);transform:perspective(900px) translateY(27px) rotateX(-5deg) scale(.985)}
.entrances-ready [data-enter="lift"]:not(.entered){filter:blur(6px);transform:translate3d(0,28px,0) skewY(1.6deg)}
.entrances-ready [data-enter="cascade"]:not(.entered){filter:blur(5px);transform:translate3d(14px,18px,0) scale(.98)}
.entrances-ready [data-enter="line"]:not(.entered){clip-path:inset(0 100% 0 0);transform:translateX(-8px)}
.entrances-ready [data-enter].entered{animation:enter-resolve .82s calc(var(--enter-delay) + 30ms) cubic-bezier(.16,1,.3,1) both}
.entrances-ready [data-enter="mist"].entered{animation-name:enter-mist;animation-duration:1.12s}
.entrances-ready [data-enter="glass"].entered{animation-name:enter-glass;animation-duration:1.08s}
.entrances-ready [data-enter="trace"].entered,.entrances-ready [data-enter="line"].entered{animation-name:enter-trace;animation-duration:.88s}
.entrances-ready [data-enter="cascade"].entered{animation-name:enter-cascade}
@keyframes enter-resolve{0%{opacity:0;filter:blur(6px);transform:translate3d(0,28px,0) skewY(1.6deg)}65%{opacity:1;filter:blur(0);transform:translate3d(0,-2px,0) skewY(-.2deg)}100%{opacity:1;filter:none;transform:none}}
@keyframes enter-mist{0%{opacity:0;filter:blur(14px);transform:translate3d(12px,17px,0) scale(.985)}56%{opacity:.74;filter:blur(3px)}100%{opacity:1;filter:none;transform:none}}
@keyframes enter-glass{0%{opacity:0;filter:blur(8px);clip-path:inset(8% 0 8% 0 round 22px);transform:perspective(900px) translateY(27px) rotateX(-5deg) scale(.985)}61%{opacity:1;filter:blur(1px);clip-path:inset(0 round 12px);transform:perspective(900px) translateY(-3px) rotateX(1deg) scale(1.005)}100%{opacity:1;filter:none;clip-path:none;transform:none}}
@keyframes enter-trace{0%{opacity:0;filter:blur(4px);clip-path:inset(0 100% 0 0);transform:translateX(-8px)}38%{opacity:1;filter:blur(1px)}100%{opacity:1;filter:none;clip-path:none;transform:none}}
@keyframes enter-cascade{0%{opacity:0;filter:blur(5px);transform:translate3d(14px,18px,0) scale(.98)}72%{opacity:1;filter:none;transform:translate3d(-2px,-2px,0) scale(1.005)}100%{opacity:1;filter:none;transform:none}}
.enter-word{display:inline-block;white-space:nowrap}
.entrances-ready [data-enter]:not(.entered) .enter-word{opacity:0;filter:blur(11px);transform:translateY(16px) rotate(2deg)}
.entrances-ready [data-enter].entered .enter-word{animation:enter-word-surface .83s calc(170ms + var(--word-index)*115ms) cubic-bezier(.16,1,.3,1) both}
@keyframes enter-word-surface{0%{opacity:0;filter:blur(11px);clip-path:inset(0 0 100%);transform:translateY(16px) rotate(2deg)}70%{opacity:1;filter:blur(1px);clip-path:inset(0);transform:translateY(-2px) rotate(-.3deg)}100%{opacity:1;filter:none;clip-path:none;transform:none}}
/* A method switch resolves controls in different directions from the terminal rim. */
.selection-shift .tool-head{animation:enter-trace .6s both!important}
.selection-shift #tool-title{animation:enter-mist .77s .06s both!important}
.selection-shift .tool-description{animation:enter-cascade .74s .1s both!important}
.selection-shift .terminal,.selection-shift .manual-help{animation:enter-glass .88s .14s both!important}
.selection-shift .signal-panel{animation:enter-glass .9s .2s both!important}
/* Existing scroll cards have individual trajectories, so a section does not
   enter as one repeated stack of identical fades. */
.js .story-method[data-reveal]{clip-path:inset(0 0 35% 0);filter:blur(5px);transform:perspective(850px) translate3d(20px,21px,0) rotateY(-3deg);transition:opacity .8s,filter .9s,clip-path .9s cubic-bezier(.16,1,.3,1),transform .9s cubic-bezier(.16,1,.3,1)}
.js .story-method[data-reveal].is-visible{clip-path:none;filter:none;transform:none}
.js .evidence-list article[data-reveal]{filter:blur(5px);transform:translate3d(27px,0,0) skewX(-1.2deg);transition:opacity .85s,filter .9s,transform 1s cubic-bezier(.16,1,.3,1)}
.js .evidence-list article[data-reveal]:nth-child(even){transform:translate3d(-27px,0,0) skewX(1.2deg)}
.js .evidence-list article[data-reveal].is-visible{filter:none;transform:none}
.js .project-group[data-reveal]{filter:blur(6px);clip-path:inset(0 5% 0 5% round 18px);transform:scale(.976);transition:opacity .9s,filter 1s,clip-path 1.1s cubic-bezier(.16,1,.3,1),transform 1.1s cubic-bezier(.16,1,.3,1)}
.js .project-group[data-reveal].is-visible{filter:none;clip-path:none;transform:none}
.js .tool-guide[data-reveal]{filter:blur(6px);transform:perspective(900px) translateY(34px) rotateX(2.5deg);transition:opacity .9s,filter 1s,transform 1.1s cubic-bezier(.16,1,.3,1)}
.js .tool-guide[data-reveal].is-visible{filter:none;transform:none}
@media(prefers-reduced-motion:reduce){.entrances-ready [data-enter],.entrances-ready [data-enter].entered,.entrances-ready [data-enter] .enter-word,.selection-shift>*{animation:none!important;transition:none!important;opacity:1!important;filter:none!important;clip-path:none!important;transform:none!important}}
.motion-paused [data-enter],.motion-paused [data-enter].entered,.motion-paused [data-enter] .enter-word,.motion-paused .selection-shift>*{animation:none!important;opacity:1!important;filter:none!important;clip-path:none!important;transform:none!important}
@media(prefers-reduced-motion:reduce){.js .story-method[data-reveal],.js .evidence-list article[data-reveal],.js .project-group[data-reveal],.js .tool-guide[data-reveal]{clip-path:none;filter:none;transform:none;transition:none}}
.motion-paused .story-method[data-reveal],.motion-paused .evidence-list article[data-reveal],.motion-paused .project-group[data-reveal],.motion-paused .tool-guide[data-reveal]{clip-path:none;filter:none;transform:none;transition:none}
