/* Motion system with staged reveals and a source-code atmosphere. */
.js .reveal{opacity:0;transform:translateY(28px);filter:blur(5px);transition:opacity .62s ease,transform .72s cubic-bezier(.2,.7,.2,1),filter .5s ease;transition-delay:var(--reveal-delay,0ms)}
.js .reveal.is-visible{opacity:1;transform:none;filter:none}
.hero-copy .reveal{transform:translateY(20px)}
.hero-copy .reveal.is-visible:nth-child(2){animation:hero-wordmark .8s cubic-bezier(.2,.85,.2,1) both var(--reveal-delay,0ms)}
@keyframes hero-wordmark{0%{letter-spacing:-.13em;clip-path:inset(0 100% 0 0)}100%{letter-spacing:-.09em;clip-path:inset(0 0 0 0)}}

/* Code is a quiet layer of texture, rather than literal Matrix rain. */
.hero-art-wrap::before,.statement::after{content:attr(data-code);white-space:pre;position:absolute;z-index:2;font:500 10px/1.65 "DM Mono";letter-spacing:.02em;pointer-events:none}
.hero-art-wrap::before{top:12%;left:8%;color:var(--lime);text-shadow:0 0 12px rgba(199,251,24,.75);mix-blend-mode:screen;opacity:.84;animation:terminal-flicker 5s steps(2,end) infinite}
.hero-art-wrap::after{content:"";position:absolute;z-index:1;inset:0;background:repeating-linear-gradient(0deg,transparent 0 5px,rgba(19,20,18,.14) 6px 7px);mix-blend-mode:multiply;pointer-events:none;animation:scan 7s linear infinite}
.statement{position:relative;overflow:hidden}.statement::after{right:8%;bottom:13%;color:var(--lime);opacity:.3;text-shadow:0 0 18px rgba(199,251,24,.45)}
@keyframes terminal-flicker{0%,8%,10%,100%{opacity:.84}9%{opacity:.26}48%{opacity:.82}49%{opacity:.45}}
@keyframes scan{from{transform:translateY(-8px)}to{transform:translateY(8px)}}
@keyframes pulse{50%{transform:scale(1.55);opacity:.45}}
.availability i{animation:pulse 1.8s ease-in-out infinite}.ticker{background-image:linear-gradient(90deg,#121212 0 34%,#17210b 46%,#121212 64%);background-size:220% 100%;animation:ticker-glow 8s linear infinite}@keyframes ticker-glow{to{background-position:220% 0}}

@media(hover:hover){.button,.project-link,.tags span{transition:transform .25s cubic-bezier(.2,.7,.2,1),box-shadow .25s ease,background .25s ease}.button:hover,.project-link:hover{transform:translate(-3px,-3px);box-shadow:5px 5px 0 var(--lime)}.tags span:hover{transform:translateY(-2px);background:var(--ink);color:var(--paper)}.phone{transition:transform .65s cubic-bezier(.2,.7,.2,1),box-shadow .4s ease}.divine-talk:hover .phone{transform:rotate(2deg) translateY(-16px);box-shadow:22px 22px 0 #1e0822}.tv-frame{transition:transform .65s cubic-bezier(.2,.7,.2,1),box-shadow .5s ease}.divine-tv:hover .tv-frame{transform:rotate(-2deg) translateY(-10px);box-shadow:23px 23px 0 var(--pink)}.wave i{transition:transform .3s ease}.voice-log:hover .wave i:nth-child(odd){transform:scaleY(.62)}.voice-log:hover .wave i:nth-child(even){transform:scaleY(1.13)}.relance-orbit{transition:transform 1.2s cubic-bezier(.2,.7,.2,1)}.relance:hover .relance-orbit{transform:rotate(120deg)}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}.js .reveal{opacity:1;transform:none;filter:none}.hero-art-wrap::after{display:none}}
