/* The foreground W reverses the colors beneath its silhouette. */
.w-negative{position:absolute;top:50%;left:50%;width:min(76vw,72svh,800px);height:min(76vw,72svh,800px);z-index:7;pointer-events:none;opacity:0;mix-blend-mode:difference;will-change:transform,opacity}
.w-negative-plane{width:100%;height:100%;background:#fff;mask:url('assets/w-negative-mask.png') center/contain no-repeat;mask-mode:alpha;-webkit-mask:url('assets/w-negative-mask.png') center/contain no-repeat;-webkit-mask-mode:alpha;transform-origin:center;backface-visibility:visible;will-change:transform}
/* Reversible entrances: each element returns naturally when scrolling back. */
.scrolling-live .scroll-reveal{opacity:0;translate:var(--enter-x,0px) 36px;scale:.98;transition:opacity .55s ease,translate .8s cubic-bezier(.16,1,.3,1),scale .8s cubic-bezier(.16,1,.3,1);transition-delay:0ms}
.scrolling-live .scroll-reveal.is-past{translate:0 -28px;scale:.985}
.scrolling-live .scroll-reveal.is-visible,.scrolling-live .scroll-reveal:focus-within{opacity:1;translate:0 0;scale:1;transition-delay:var(--reveal-delay,0ms)}
.profile-layout h2{--enter-x:-22px}.bio{--enter-x:22px}
.wais-accent{translate:0 var(--accent-shift,0px);rotate:var(--accent-turn,0deg);scale:var(--accent-scale,1);transition:scale .2s ease;will-change:translate,rotate}
.wais-accent img{animation:wais-drift 6s ease-in-out infinite alternate;animation-play-state:paused}
.section.in-view .wais-accent img{animation-play-state:running}
.reviews .wais-accent img{animation-delay:-2s}.contact .wais-accent img{animation-delay:-4s}
@keyframes wais-drift{from{translate:-4px 3px;rotate:-6deg}to{translate:5px -5px;rotate:8deg}}
.traits span{display:inline-block;opacity:.35;translate:0 12px;transition:opacity .5s,translate .65s cubic-bezier(.16,1,.3,1);transition-delay:calc(var(--trait-index,0)*75ms)}
.traits.is-visible span{opacity:1;translate:0 0}
.traits:after{rotate:var(--trait-turn,0deg);transition:rotate .2s linear}
.reviews .review-card{transform:perspective(950px) rotateX(var(--tilt-x,0deg)) rotateY(var(--tilt-y,0deg));transition:box-shadow .25s,border-color .25s,transform .3s,opacity .55s,translate .8s cubic-bezier(.16,1,.3,1),scale .8s cubic-bezier(.16,1,.3,1);transition-delay:0s,0s,0s,var(--reveal-delay,0ms),var(--reveal-delay,0ms),var(--reveal-delay,0ms)}
.review-top{position:relative;padding-bottom:14px}.review-top:after{content:'';position:absolute;inset:auto 0 0;height:1px;background:currentColor;opacity:.22;transform:scaleX(0);transform-origin:left;transition:transform 1s cubic-bezier(.16,1,.3,1) .15s}.review-card.is-visible .review-top:after{transform:scaleX(1)}
.nav nav a{position:relative}.nav nav a:after{content:'';position:absolute;left:0;right:0;bottom:-5px;height:1px;background:currentColor;transform:scaleX(0);transform-origin:right;transition:transform .3s}.nav nav a:hover:after,.nav nav a:focus-visible:after{transform:scaleX(1);transform-origin:left}
.text-link span,.contact-links a span,.card-open{display:inline-block;transition:translate .3s,rotate .3s}
.text-link:hover span,.contact-links a:hover span{translate:3px -3px}.project-card:hover .card-open{rotate:45deg}
.contact-title{transform-origin:left center}.contact-title:hover{color:inherit}
body.reduced .w-negative{display:none}
body.reduced .scroll-reveal,body.reduced .traits span{opacity:1!important;translate:0 0!important;scale:1!important;transition:none!important}
body.reduced .wais-accent{translate:0 0;rotate:0deg;scale:1;will-change:auto}
body.reduced .wais-accent img{animation:none}body.reduced .review-card{transform:none!important}body.reduced .traits:after{rotate:0deg}body.reduced .review-top:after{transform:none;transition:none}
body.reduced .text-link span,body.reduced .contact-links a span,body.reduced .card-open{translate:none!important;rotate:none!important;transition:none}
@media(max-height:560px){.w-negative{width:65svh;height:65svh}}
@media(max-width:700px){.profile-layout h2,.bio{--enter-x:0px}.scrolling-live .scroll-reveal{translate:0 22px}}
@media(prefers-reduced-motion:reduce){.scrolling-live .scroll-reveal,.traits span{opacity:1!important;translate:0 0!important;scale:1!important;transition:none!important}.wais-accent{translate:0 0!important;rotate:0deg!important;scale:1!important}.wais-accent img{animation:none!important}.reviews .review-card{transform:none!important}.review-top:after{transform:none;transition:none}.traits:after{rotate:0deg!important}.text-link span,.contact-links a span,.card-open{translate:none!important;rotate:none!important;transition:none!important}}
/* A visible kinetic system: large travel, staggered type and sculptural objects. */
.scrolling-live .scroll-reveal{translate:var(--enter-x,0px) 85px;scale:.94;transition-duration:.65s,1.1s,1.1s}
.scrolling-live .scroll-reveal.is-past{translate:0 -70px;scale:.95}
.scrolling-live .scroll-reveal.is-visible,.scrolling-live .scroll-reveal:focus-within{translate:0 0;scale:1}
.profile-layout h2{--enter-x:-65px}.bio{--enter-x:65px}
.word-window{display:inline-block;overflow:clip;vertical-align:bottom;padding-bottom:.1em;margin-bottom:-.1em}
.motion-word{display:inline-block;translate:0 115%;rotate:7deg;transform-origin:left bottom;transition:translate 1.05s cubic-bezier(.16,1,.3,1),rotate 1.05s cubic-bezier(.16,1,.3,1);transition-delay:calc(var(--word-index)*80ms)}
.is-visible .motion-word,.is-visible.motion-word,:focus-within>.word-window .motion-word{translate:0 0;rotate:0deg}
.is-past .motion-word{translate:0 -110%;rotate:-5deg;transition-delay:0ms}
.section .section-marker{position:relative;min-height:170px;padding-right:190px;overflow:visible}
.section .section-marker .wais-accent{position:absolute;right:130px;top:45px;width:85px;height:80px;opacity:.7}
.kinetic-object{position:absolute;right:12px;top:8px;width:145px;height:145px;perspective:650px;pointer-events:none;translate:0 var(--object-travel,0px);rotate:var(--object-scroll,0deg)}
.orbit-frame{position:absolute;inset:0;transform-style:preserve-3d;animation:orbit-tumble 11s linear infinite;animation-play-state:paused}
.in-view .orbit-frame{animation-play-state:running}
.orbit-ring{position:absolute;inset:8px;border:10px solid currentColor;border-radius:50%;box-shadow:inset 2px 2px 5px #ffffff88,3px 5px 8px #001d4930;transform:rotateX(62deg);opacity:.8}
.ring-two{transform:rotateY(65deg) rotateX(-25deg);border-width:6px;inset:17px;opacity:.5}
.orbit-core{position:absolute;inset:48px;border-radius:50%;background:radial-gradient(circle at 28% 23%,#fff 0%,currentColor 44%,#092c8050 100%);box-shadow:5px 10px 20px #001d4930;transform:translateZ(15px)}
.orbit-dot{position:absolute;width:14px;height:14px;top:5px;left:60px;border-radius:50%;background:currentColor;box-shadow:0 0 16px currentColor;transform:translateZ(25px)}
.object-1 .orbit-frame{animation-duration:14s;animation-direction:reverse}.object-2 .orbit-frame{animation-delay:-4s}
@keyframes orbit-tumble{0%{transform:rotateX(12deg) rotateY(0deg) rotateZ(0deg)}50%{transform:rotateX(-22deg) rotateY(180deg) rotateZ(15deg)}100%{transform:rotateX(12deg) rotateY(360deg) rotateZ(0deg)}}
@keyframes wais-drift{from{translate:-12px 9px;rotate:-16deg}to{translate:12px -12px;rotate:18deg}}
.reviews .review-card.scroll-reveal{--enter-x:-36px;rotate:-5deg;translate:var(--enter-x) 105px;transition:opacity .7s,translate 1.15s cubic-bezier(.16,1,.3,1),scale 1.15s,rotate 1.15s cubic-bezier(.16,1,.3,1),transform .3s,box-shadow .3s;transition-delay:var(--reveal-delay),var(--reveal-delay),var(--reveal-delay),var(--reveal-delay),0s,0s}
.reviews .review-card:nth-child(2){--enter-x:0px;rotate:4deg}.reviews .review-card:nth-child(3){--enter-x:36px;rotate:7deg}
.reviews .review-card.is-visible{translate:0 0;rotate:0deg}
.reviews .review-card.is-past{translate:0 -85px;rotate:-4deg}
.contact-title>span{animation:arrow-bob 2.4s ease-in-out infinite;animation-play-state:paused}.contact.in-view .contact-title>span{animation-play-state:running}
@keyframes arrow-bob{0%,100%{translate:0 0}50%{translate:12px -12px}}
.traits.is-visible:after{animation:mark-turn 8s ease-in-out infinite}
@keyframes mark-turn{0%,15%{transform:rotate(-15deg)}65%,100%{transform:rotate(345deg)}}
body.reduced .motion-word{translate:0 0;rotate:0deg;transition:none}body.reduced .kinetic-object{translate:0 0;rotate:0deg}body.reduced .orbit-frame,body.reduced .contact-title>span,body.reduced .traits:after{animation:none}body.reduced .review-card{rotate:0deg}
@media(max-width:700px){.section .section-marker{min-height:125px;padding-right:140px}.kinetic-object{width:100px;height:100px;right:0;top:12px}.orbit-ring{border-width:7px}.ring-two{border-width:4px;inset:12px}.orbit-core{inset:33px}.orbit-dot{left:42px;width:10px;height:10px}.section .section-marker .wais-accent{right:83px;width:60px;height:60px;top:25px}.profile-layout h2,.bio{--enter-x:0px}.reviews .review-card.scroll-reveal{--enter-x:0px;translate:0 65px}.reviews .review-card.is-visible{translate:0 0}.reviews .review-card.is-past{translate:0 -50px}}
@media(prefers-reduced-motion:reduce){.motion-word{translate:0 0!important;rotate:0deg!important;transition:none!important}.kinetic-object{translate:0 0!important;rotate:0deg!important}.orbit-frame,.contact-title>span,.traits:after{animation:none!important}.reviews .review-card{rotate:0deg!important}}

/* Clean motion: quiet typography, no decorative orbital objects. */
.section .section-marker{min-height:70px;padding-right:110px}
.section .section-marker .wais-accent{right:0;top:0;width:85px;height:65px}
.scrolling-live .scroll-reveal{translate:0 24px;scale:1;transition-duration:.5s,.75s,.75s}
.scrolling-live .scroll-reveal.is-past{translate:0 -20px;scale:1}
.scrolling-live .scroll-reveal.is-visible,.scrolling-live .scroll-reveal:focus-within{translate:0 0;scale:1}
.motion-word{rotate:0deg;transition-duration:.75s;transition-delay:calc(var(--word-index)*35ms)}
.is-past .motion-word{rotate:0deg}
.reviews .review-card.scroll-reveal{rotate:0deg;translate:0 30px;scale:1;transform:none;transition:opacity .5s,translate .75s cubic-bezier(.16,1,.3,1),box-shadow .25s;transition-delay:var(--reveal-delay),var(--reveal-delay),0s}
.reviews .review-card.is-visible{translate:0 0;rotate:0deg}.reviews .review-card.is-past{translate:0 -20px;rotate:0deg}
.wais-accent{rotate:0deg;scale:1;translate:0 0}.wais-accent img,.traits.is-visible:after,.contact-title>span{animation:none}
@media(max-width:700px){.section .section-marker{min-height:60px;padding-right:80px}.section .section-marker .wais-accent{right:0;top:0;width:65px;height:50px}.reviews .review-card.scroll-reveal{translate:0 24px}.reviews .review-card.is-visible{translate:0 0}}
