/* Small interaction cues only. No continuous motion, layout animation or scroll hijacking. */
@media(prefers-reduced-motion:no-preference){
 .site-header nav a{position:relative}
 .site-header nav a::after{content:"";position:absolute;left:0;right:0;bottom:-5px;height:1px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform 220ms ease}
 .site-header nav a:is(:hover,:focus-visible)::after{transform:scaleX(1)}
 .button,.text-link,.collection-preview-card,.store-grid>article{transition:translate 220ms ease,background-color 220ms ease,border-color 220ms ease,box-shadow 220ms ease}
 .button:active{translate:0 1px}
 .shop-switch button,.material-options button,.sub-options button,.collection-tabs button,.color-options button{transition:background-color 180ms ease,border-color 180ms ease,color 180ms ease}
 .plus,.calc-expand{transition:transform 220ms ease}
 .help-dialog[open]{animation:haven-dialog-enter 240ms cubic-bezier(.22,1,.36,1)}
 .help-dialog[open]::backdrop{animation:haven-backdrop-enter 200ms ease}
 @media(hover:hover) and (pointer:fine){
  .collection-preview-card:hover,.store-grid>article:hover{translate:0 -3px}
  .button:hover{translate:0 -2px;transform:none}
 }
}
@keyframes haven-dialog-enter{from{opacity:.5;translate:0 8px}to{opacity:1;translate:0 0}}
@keyframes haven-backdrop-enter{from{opacity:0}to{opacity:1}}
@media(prefers-reduced-motion:reduce){
 html{scroll-behavior:auto!important}
 .button:hover,.button:active,.collection-preview-card:hover,.store-grid>article:hover{translate:none;transform:none}
 .help-dialog,.help-dialog::backdrop{animation:none!important}
}
