/* Independent progressive enhancement: static content is the default. */
:root{--paper:#f3f1e9;--ink:#24251f;--muted:#62635a;--line:#cfcec4;--violet:#6652b0}
@property --s{syntax:'<number>';inherits:false;initial-value:1}
.skill-marquee{border-block:1px solid var(--line);padding:15px 0;font-size:13px;line-height:1;letter-spacing:.14em;text-transform:uppercase;color:var(--ink);white-space:nowrap;overflow:hidden;max-width:100%;background:var(--paper)}
.skill-marquee{-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.marquee-track{display:flex;width:max-content}
.marquee-copy{display:flex;align-items:center;gap:30px;padding-right:30px;flex-shrink:0}
.marquee-mark{width:11px;height:12px;fill:#5B3FB0;flex:none;opacity:.9}
.motion-ready .marquee-track{animation:rv-marquee 60s linear infinite}
@keyframes rv-marquee{to{transform:translateX(-50%)}}
.w{display:inline-block;overflow:hidden;vertical-align:top}
.w>span{display:inline-block}
.motion-ready .motion-words .w>span{transition:transform 700ms cubic-bezier(.2,.8,.2,1);transition-delay:var(--delay,0ms)}
.motion-ready .motion-words.motion-pending .w>span{transform:translateY(105%)}
.motion-ready .motion-image{transition:clip-path 1100ms cubic-bezier(.2,.8,.2,1)}
.motion-ready .motion-image.motion-pending{clip-path:inset(12% 6% 12% 6%)}
.motion-ready .motion-image:not(.motion-pending){clip-path:inset(0)}
.motion-ready .image-stage img,.motion-ready .publication-images img,.motion-ready img.motion-image{transform:translate3d(0,var(--py,0px),0) scale(var(--s,1))!important;transition:--s 1100ms cubic-bezier(.2,.8,.2,1)}
.motion-ready .motion-image.motion-pending .motion-scale,.motion-ready img.motion-image.motion-pending{--s:1.12}
/* The new image/heading layer replaces the older project entry. */
.motion-ready .project.reveal-ready{opacity:1;transform:none;transition:none}
.motion-magnet{translate:var(--mx,0px) var(--my,0px);transition:translate 450ms cubic-bezier(.2,1.5,.4,1)!important}
.rv-brand-mark{width:auto;max-width:none;flex-shrink:0;display:inline-block}
.footer-mark{display:block;width:auto;height:120px;flex-shrink:0;max-width:100%}
.footer-mark path{stroke:#5B3FB0;stroke-width:5;stroke-dasharray:1;stroke-dashoffset:0;fill:#5B3FB0}
.motion-ready .footer-mark.motion-pending path{stroke-dashoffset:1;fill:transparent}
.footer-mark.is-drawing path{animation:rv-draw 1.2s ease both}
@keyframes rv-draw{0%{stroke-dashoffset:1;fill:transparent}70%{stroke-dashoffset:0;fill:transparent}100%{stroke-dashoffset:0;fill:#5B3FB0}}
.page-curtain{position:fixed;inset:0;z-index:90;background:#5B3FB0;display:grid;place-items:center;transform:translateY(100%);pointer-events:auto}
.page-curtain svg{height:56px;width:auto;fill:#f3f1e9}
@media(max-width:600px){footer.wrap:has(.footer-mark){flex-wrap:wrap;gap:20px}footer .footer-mark{flex-basis:100%;object-fit:contain;object-position:left}header .rv-brand-mark{height:18px;width:17px}}
html.motion-paused{scroll-behavior:auto!important}
html.motion-paused .marquee-track{animation:none!important;transform:none!important}
html.motion-paused .motion-words .w>span{transform:none!important;transition:none!important}
html.motion-paused .motion-image{clip-path:none!important;transition:none!important}
html.motion-paused .image-stage img,html.motion-paused .publication-images img,html.motion-paused img.motion-image{transform:none!important;transition:none!important}
html.motion-paused .motion-magnet{translate:none!important}
html.motion-paused .page-curtain{display:none!important}
html.motion-paused .footer-mark path{animation:none!important;stroke-dashoffset:0!important;fill:#5B3FB0!important}
@media(prefers-reduced-motion:reduce){
 html{scroll-behavior:auto!important}
 .marquee-track{animation:none!important;transform:none!important}
 .motion-words .w>span{transform:none!important;transition:none!important}
 .motion-image{clip-path:none!important;transition:none!important}
 .motion-ready .image-stage img,.motion-ready .publication-images img,.motion-ready img.motion-image{transform:none!important;transition:none!important}
 .motion-magnet{translate:none!important}
 .page-curtain{display:none!important}
 .footer-mark path{animation:none!important;stroke-dashoffset:0!important;fill:#5B3FB0!important}
}
@media(max-width:599px){.skill-marquee{font-size:11px;padding:12px 0}.marquee-copy{gap:22px;padding-right:22px}}
