/* Shared motion: content is visible by default; only an active entrance animates. */
:root{--ease-out:cubic-bezier(0.23,1,0.32,1);--motion-enter-duration:560ms;--motion-hover-duration:180ms;--reveal-distance:18px}
.motion-entering{animation:site-enter var(--motion-enter-duration) var(--ease-out) var(--reveal-delay,0ms) both}
.motion-entering.motion-image{animation-name:site-image-enter}
@keyframes site-enter{from{opacity:.18;transform:var(--motion-base-transform,matrix(1,0,0,1,0,0)) translateY(var(--reveal-distance))}to{opacity:1;transform:var(--motion-base-transform,matrix(1,0,0,1,0,0))}}
@keyframes site-image-enter{from{opacity:.18;transform:var(--motion-base-transform,matrix(1,0,0,1,0,0)) translateY(var(--reveal-distance)) scale(.98)}to{opacity:1;transform:var(--motion-base-transform,matrix(1,0,0,1,0,0))}}
/* Keep the image framing; stop continuous movement and legacy hover transforms. */
.hero-art{animation:none}
.hero-image img,.range-grid img,.feature-grid>img,.story-image img,.wholesale-image img,.delivery-grid img{transition:none}
.hero-image:hover img,.range-grid article:hover img,.feature-grid>img:hover,.story-image:hover img,.wholesale-image:hover img,.delivery-grid figure:hover img{transform:none;filter:none}
.range-grid article,.service-grid article,.review-card,.contact-card{transition:none}
.range-grid article:hover,.service-grid article:hover,.review-card:hover,.contact-card:hover{transform:none}
/* Navigation feedback uses opacity; reading content stays still on hover. */
.utility-inner nav a,.shop-tools a,.site-footer a,.review-source{transition:opacity var(--motion-hover-duration) ease}
.button{transition:transform var(--motion-hover-duration) ease,opacity var(--motion-hover-duration) ease}
.button:hover,.button:focus-visible{transform:none}
@media(hover:hover) and (pointer:fine){
 .utility-inner nav a:hover,.shop-tools a:hover,.site-footer a:hover,.review-source:hover{opacity:.78}
 .button:not(.motion-entering):hover{opacity:.94}
}
@media(hover:hover) and (pointer:fine) and (prefers-reduced-motion:no-preference){
 .button:not(.motion-entering):hover{transform:translateY(-2px)}
 .button:not(.motion-entering):active{transform:translateY(0) scale(.98);transition-duration:120ms}
 .button:not(.motion-entering):focus-visible{transform:none}
}
@media(prefers-reduced-motion:reduce){
 .motion-entering{animation:none;opacity:1;transform:none}
 .button,.utility-inner nav a,.shop-tools a,.site-footer a,.review-source{transition:opacity 120ms ease}
 .button:hover,.button:active,.button:focus-visible{transform:none}
}

/* Keep the navigation underline stable; fade it only for real hover or focus. */
.utility-inner nav a::after{transform:scaleX(1) rotate(-1deg);opacity:0;transition:opacity var(--motion-hover-duration) ease}
.utility-inner nav a:hover::after{opacity:0}
.utility-inner nav a:focus-visible::after{opacity:1;transition:none}
@media(hover:hover) and (pointer:fine){.utility-inner nav a:hover::after{opacity:1}}
@media(prefers-reduced-motion:reduce){.utility-inner nav a::after{transition:opacity 120ms ease}.utility-inner nav a:focus-visible::after{transition:none}}
