/* The same circle, line and arrow language across touch and pointer interactions. */
.effects-ready .project-dialog[open],.effects-ready .index-dialog[open],.effects-ready .contact-dialog[open],.effects-ready .mobile-sheet{animation:none}
.click-signal{width:48px;height:48px;pointer-events:none;z-index:100;display:block;color:var(--accent);contain:layout style}
.click-signal svg{display:block;width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.4}
.contact-check svg{width:29px;height:29px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.contact-check path{stroke-dasharray:30;stroke-dashoffset:0}
.gallery-index button{position:relative}
.gallery-index button:after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .55s cubic-bezier(.16,1,.3,1)}
.gallery-index button[aria-pressed=true]:after{transform:scaleX(1)}
.gallery-controls button,.theme-toggle,.round-link,.contact-nav,.contact-mobile{translate:var(--magnet-x,0px) var(--magnet-y,0px);transition:translate .35s cubic-bezier(.16,1,.3,1),background .25s,color .25s,box-shadow .3s}
.gallery-controls button.is-magnetic,.theme-toggle.is-magnetic,.round-link.is-magnetic,.contact-nav.is-magnetic{transition-duration:.15s}
.contact-nav,.contact-mobile,.contact-submit,.gallery-actions .primary-button{box-shadow:0 0 0 0 #d0ef7300}
.contact-nav:hover,.contact-mobile:hover,.contact-submit:hover,.gallery-actions .primary-button:hover{box-shadow:0 0 0 5px #d0ef7318,0 8px 24px #15171514}
.text-link .ir-icon,.primary-button .ir-icon,.contact-submit svg,.identity>.ir-icon{transition:transform .4s cubic-bezier(.16,1,.3,1)}
.text-link:hover .ir-icon,.primary-button:hover .ir-icon,.contact-submit:hover svg,.identity:hover>.ir-icon{transform:translate(3px,-2px)}
.contact-submit:disabled svg{animation:send-arrow .8s ease-in-out infinite alternate}
@keyframes send-arrow{to{transform:translateX(5px)}}
.close-button,.contact-close,.mobile-menu-close{transition:rotate .35s cubic-bezier(.16,1,.3,1),background .25s,color .25s}
.close-button:hover,.contact-close:hover,.mobile-menu-close:hover{rotate:90deg}
.mobile-dock>a svg{transition:transform .35s cubic-bezier(.16,1,.3,1)}
.mobile-dock>a[aria-current=location] svg{transform:translateY(-2px)}
.mobile-explore{position:relative;isolation:isolate}
.mobile-explore:before{content:'';position:absolute;inset:-6px;border:1px solid var(--signal);border-radius:50%;opacity:0;transform:scale(.8);transition:transform .5s cubic-bezier(.16,1,.3,1),opacity .4s;pointer-events:none}
.mobile-explore[aria-expanded=true]:before{opacity:.45;transform:scale(1)}
.mobile-project-index a{transition:background .25s,border-color .25s,transform .3s}
.mobile-project-index a:hover{border-color:var(--signal);transform:translateY(-2px)}
@media(hover:hover) and (pointer:fine){
 .effects-ready:not(.motion-reduced) .gallery-screen{transform:perspective(850px) rotateX(var(--tilt-x,0deg)) rotateY(var(--tilt-y,0deg));transition:transform .6s cubic-bezier(.16,1,.3,1)}
 .effects-ready:not(.motion-reduced) .gallery-card:after{content:'';position:absolute;inset:0;background:radial-gradient(400px circle at var(--light-x,50%) var(--light-y,50%),#ffffff25,transparent 65%);opacity:0;transition:opacity .3s;pointer-events:none}
 .effects-ready:not(.motion-reduced) .gallery-card.is-pointed:after{opacity:1}
 .effects-ready:not(.motion-reduced) .gallery-card.is-pointed{cursor:none}
 .project-cursor{border-radius:50%;font-size:10px;text-align:center;line-height:1.4;padding:16px;box-shadow:0 8px 32px #0002}
 .project-cursor:before{content:'';position:absolute;inset:-7px;border:1px dashed var(--accent);border-radius:50%;opacity:.7}
 .project-cursor.is-active:before{animation:cursor-orbit 12s linear infinite}
 @keyframes cursor-orbit{to{rotate:360deg}}
}
.motion-reduced .click-signal{display:none}
.motion-reduced .gallery-screen,.motion-reduced .close-button,.motion-reduced .contact-close,.motion-reduced .mobile-menu-close{transform:none!important;rotate:none!important}
.motion-reduced .is-magnetic{translate:none!important}
@media(prefers-reduced-motion:reduce){
 .click-signal{display:none}
 .gallery-screen{transform:none!important}
 .is-magnetic{translate:none!important}
 .close-button,.contact-close,.mobile-menu-close{rotate:none!important}
 .project-cursor:before{animation:none!important}
}
