/* Small movements, no animation library and no continuously running JS. */
.contact-section{position:relative}
.contact-section::before{content:"";position:absolute;top:0;left:0;width:65px;height:2px;background:var(--accent);transform-origin:left}
.contact-rows>div>svg{padding:7px;width:35px;height:35px;background:var(--soft);border-radius:11px}
@keyframes elvex-contact-line{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes elvex-ring{0%,100%{transform:rotate(0)}20%{transform:rotate(-5deg)}40%{transform:rotate(4deg)}60%{transform:rotate(-2deg)}80%{transform:rotate(1deg)}}
@keyframes elvex-breathe{0%,100%{opacity:0;transform:scale(.99)}45%{opacity:.22;transform:scale(1.025)}}
@media(max-width:850px){
 .mobile-dock{left:10px;right:10px;bottom:calc(10px + env(safe-area-inset-bottom));padding:7px;gap:5px;border:1px solid var(--line);border-radius:17px;box-shadow:0 8px 30px #172b2424}
 .mobile-dock.dock-managed{visibility:hidden;transform:translateY(calc(100% + 35px));opacity:0;pointer-events:none;transition:transform .4s cubic-bezier(.2,.8,.2,1),opacity .25s,visibility .4s}
 .mobile-dock.dock-visible{visibility:visible;transform:translateY(0);opacity:1;pointer-events:auto}
 .mobile-dock a{position:relative;min-height:48px;border-radius:11px;font-size:11px;gap:6px}
 .mobile-dock a:first-child{border-radius:11px;isolation:isolate}
 .mobile-dock a:first-child::before{content:"";position:absolute;inset:-3px;background:var(--accent);border-radius:14px;opacity:0;z-index:-1;pointer-events:none}
 .mobile-dock a:first-child::after{content:"";position:absolute;inset:0;border-radius:11px;background:linear-gradient(110deg,transparent 20%,#ffffff24 50%,transparent 80%);opacity:0;pointer-events:none}
}
@media(prefers-reduced-motion:no-preference){
 .contact-welcome::before{animation:elvex-contact-line .65s ease-out both}
 .contact-welcome .contact-rows>div:first-child>svg{animation:elvex-ring .9s ease .3s 1}
 .dock-visible a:first-child::before{animation:elvex-breathe 1.8s ease .45s 2}
 .dock-visible a:first-child::after{animation:elvex-breathe 1.8s ease .45s 2}
 .dock-visible a:first-child>svg{animation:elvex-ring .9s ease .6s 1}
}
@media(prefers-reduced-motion:reduce){
 .mobile-dock.dock-managed{transition:none}
 .contact-welcome::before,.contact-welcome .contact-rows>div:first-child>svg,.dock-visible a:first-child::before,.dock-visible a:first-child::after,.dock-visible a:first-child>svg{animation:none}
}
.section-nav a{position:relative;transition:color .18s ease}
.section-nav a::after{content:"";position:absolute;bottom:0;left:0;right:6px;height:2px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .22s ease}
.section-nav a[aria-current="location"]{color:var(--accent);font-weight:600}
.section-nav a[aria-current="location"]::after{transform:scaleX(1)}
.profile{box-shadow:0 12px 32px -24px #172b2440}
.primary{position:relative;overflow:hidden;isolation:isolate}
.primary::after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent 25%,#ffffff20 50%,transparent 75%);transform:translateX(-110%);pointer-events:none}
.profile-actions>.primary::before{content:"";position:absolute;inset:0;border-radius:inherit;background:linear-gradient(110deg,transparent 20%,#ffffff40 50%,transparent 80%);opacity:0;pointer-events:none}
@media(prefers-reduced-motion:no-preference){.profile-actions>.primary::before{animation:elvex-breathe 1.8s ease 1s 2}.profile-actions>.primary>svg{animation:elvex-ring .9s ease 1.2s 1}}
.swatch{transition:transform .18s ease,outline-offset .18s ease}
.swatch[aria-pressed="true"]{outline-offset:2px}
.button,.icon-button,.social-link,.map-link{transition:transform .2s ease,background-color .2s ease,border-color .2s ease,box-shadow .2s ease}
.social-link .outward,.map-link>svg,.qr-card a>svg{transition:transform .2s ease}
.service-list summary .plus{transition:transform .2s ease}
.service-list details[open] .plus{transform:rotate(180deg)}
.button:active,.social-link:active,.map-link:active{transform:translateY(1px)}
@media(hover:hover) and (pointer:fine){
 .button:hover,.social-link:hover{transform:translateY(-2px);box-shadow:0 8px 18px -12px #172b2455}
 .primary:hover::after,.primary:focus-visible::after{animation:elvex-sheen .65s ease both}
 .swatch:hover{transform:scale(1.13)}
 .social-link:hover .outward,.map-link:hover>svg{transform:translate(2px,-2px)}
 .qr-card a:hover>svg{transform:translateY(2px)}
 .icon-button:hover{transform:translateY(-2px);background:var(--soft);border-radius:50%}
}
@keyframes elvex-sheen{to{transform:translateX(110%)}}
@keyframes elvex-arrive{from{transform:translateY(12px);opacity:.7}to{transform:translateY(0);opacity:1}}
@keyframes elvex-cover{from{transform:translate(12px,-8px);opacity:.6}to{transform:translate(0,0);opacity:1}}
@keyframes elvex-progress{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@media(prefers-reduced-motion:no-preference){
 .arriving{animation:elvex-arrive .48s cubic-bezier(.2,.7,.25,1) both}
 .cover-circle{animation:elvex-cover .9s ease-out both}
 @supports(animation-timeline:scroll()){
  body::before{content:"";position:fixed;top:0;left:0;right:0;height:2px;background:var(--accent);z-index:30;transform-origin:left;animation:elvex-progress linear both;animation-timeline:scroll();pointer-events:none}
 }
}
@media(prefers-reduced-motion:reduce){
 .button,.icon-button,.social-link,.map-link,.swatch,.section-nav a,.section-nav a::after,.social-link .outward,.map-link>svg,.qr-card a>svg,.service-list summary .plus{transition:none}
 .primary::after,.arriving,.cover-circle{animation:none!important}
 .button:hover,.social-link:hover,.button:active,.social-link:active,.map-link:active{transform:none}
}
