/* ── MOTION ── (everything below is skipped or neutralised under prefers-reduced-motion) */
@keyframes up{from{opacity:0;translate:0 22px}}
@keyframes pop{from{opacity:0;translate:36px 24px;rotate:3deg}}
@keyframes fillx{from{transform:scaleX(0)}}
@keyframes slam{0%{opacity:0;scale:2.6}60%{opacity:1;scale:.92}100%{opacity:1;scale:1}}
@keyframes tick{to{transform:translateX(-50%)}}
.hero .eyebrow,.hero .lede,.hero .cta-row,.hero .hint-line{animation:up .8s cubic-bezier(.2,.8,.2,1) backwards}
.hero .eyebrow{animation-delay:.05s}.hero .lede{animation-delay:.45s}.hero .cta-row{animation-delay:.6s}.hero .hint-line{animation-delay:.8s}
.glance-card{animation:pop 1s .25s cubic-bezier(.2,.8,.2,1) backwards}
.meter i{transform-origin:left;animation:fillx 1.3s .9s cubic-bezier(.2,.8,.2,1) backwards}
.skill-loadout li{animation:up .5s backwards;animation-delay:calc(1s + var(--i,0)*.05s)}
.sticker{animation:wob 5s 1.5s ease-in-out infinite}
@keyframes wob{0%,100%{rotate:0deg}50%{rotate:-2.5deg}}
.js-enabled .reveal{opacity:0;translate:0 34px;transition:opacity .8s cubic-bezier(.2,.7,.2,1) var(--d,0s),translate .8s cubic-bezier(.2,.7,.2,1) var(--d,0s)}
.js-enabled .reveal.is-revealed{opacity:1;translate:0 0}
.js-enabled .note.reveal{transition:opacity .8s cubic-bezier(.2,.7,.2,1) var(--d,0s),translate .8s cubic-bezier(.2,.7,.2,1) var(--d,0s),transform .25s,box-shadow .25s}
.js-enabled .note .stamp{opacity:0}
.js-enabled .note.is-revealed .stamp{animation:slam .5s calc(var(--d,0s) + .7s) cubic-bezier(.2,.9,.3,1) both}
.js-enabled .achievement.reveal:not(.is-revealed){translate:0 44px}
.js-enabled h2.reveal{translate:0 .5em}
.project-lines li{animation:up .6s backwards;animation-delay:calc(var(--i,0)*.08s)}
.skill-group:not([hidden]){animation:up .5s backwards}
.skill-chips li{animation:up .45s backwards;animation-delay:calc(var(--i,0)*.025s)}
.ticker{overflow:hidden;border-block:1.5px solid var(--ink);background:var(--accent);color:var(--on-accent);padding-block:.8rem;white-space:nowrap}
.ticker .ticker-item{display:inline-flex;animation:tick 38s linear infinite;will-change:transform}
.ticker:hover .ticker-item{animation-play-state:paused}
.ticker span{font-weight:800;font-size:clamp(1.1rem,2.2vw,1.6rem);letter-spacing:-.02em;text-transform:uppercase;font-variation-settings:"opsz" 40,"wdth" 92;padding-right:1.2rem}
.ticker span::after{content:"\2736";margin-left:1.2rem;font-family:var(--serif);font-weight:400}
@media (prefers-reduced-motion:reduce){.ticker .ticker-item{animation:none}.sticker{animation:none}.js-enabled .reveal{opacity:1;translate:none}.js-enabled .note .stamp{opacity:1}}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms!important;animation-delay:0s!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}
