:root{--dogi-motion-fast:180ms;--dogi-motion-normal:300ms;--dogi-motion-slow:460ms;--dogi-motion-ease:cubic-bezier(.22,.61,.36,1);--dogi-motion-distance:16px}
/* Content is visible by default. Finite entrances never depend on JS cleanup. */
@keyframes dogi-reveal{from{opacity:0;transform:translateY(var(--dogi-motion-distance))}to{opacity:1;transform:none}}
@keyframes dogi-entrance{from{opacity:.65;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes dogi-photo-entrance{from{opacity:.7;transform:scale(1.015)}to{opacity:1;transform:none}}
.dogi-motion-enter{animation:dogi-reveal var(--dogi-motion-slow) var(--dogi-motion-ease) both}
.dogi-motion-delay-1{animation-delay:60ms}.dogi-motion-delay-2{animation-delay:120ms}
.hero-home .hero-subtitle,.hero-home h1,.hero-home .hero-copy-text,.hero-home .hero-buttons,.page-hero h1{animation:dogi-entrance var(--dogi-motion-slow) var(--dogi-motion-ease) backwards}
.hero-home h1{animation-delay:60ms}.hero-home .hero-copy-text{animation-delay:120ms}.hero-home .hero-buttons{animation-delay:180ms}
.btn,.cookie-actions button,.cookie-close,.gallery-modal button{transition:transform var(--dogi-motion-fast) var(--dogi-motion-ease)}
@media(hover:hover){.btn:not(:disabled):hover{transform:translateY(-2px)}.cookie-actions button:hover,.gallery-modal button:hover{transform:translateY(-1px)}}
.btn:not(:disabled):active,.cookie-actions button:active,.gallery-modal button:active{transform:none}
.gallery-grid img,.gallery-grid a::after{transition-duration:var(--dogi-motion-normal);transition-timing-function:var(--dogi-motion-ease)}
.gallery-modal.fade,.modal-backdrop.fade{transition:opacity var(--dogi-motion-normal) var(--dogi-motion-ease)}
.gallery-modal.show .gallery-full{animation:dogi-photo-entrance var(--dogi-motion-normal) var(--dogi-motion-ease)}
.cookie-panel:not([hidden]),[data-wizard-ready] .intake-step:not([hidden]){animation:dogi-entrance var(--dogi-motion-normal) var(--dogi-motion-ease)}
.cookie-categories:not([hidden]),.intake-client-error:not([hidden]),.field-error{animation:dogi-entrance var(--dogi-motion-fast) var(--dogi-motion-ease)}
.form-control:focus,.form-select:focus{border-color:var(--dogi-green)}
.intake-step .form-check:focus-within .form-check-label{border-color:var(--dogi-green)}
.site-header .desktop-navigation .nav-link{position:relative;text-decoration:none}
.site-header .desktop-navigation .nav-link::after{content:'';position:absolute;left:0;right:0;bottom:4px;height:2px;background:currentColor;transform:scaleX(0);transform-origin:left;transition:transform var(--dogi-motion-fast) var(--dogi-motion-ease)}
.site-header .desktop-navigation .nav-link:is(:hover,:focus-visible,[aria-current="page"])::after{transform:scaleX(1)}
.accordion-button::after{transition-duration:var(--dogi-motion-fast);transition-timing-function:var(--dogi-motion-ease)}
/* Do not compete with Bootstrap's functional height transitions. */
.values-strip .dogi-container{white-space:normal}.values-strip p{animation:none;transform:none}
@media(max-width:767px){:root{--dogi-motion-slow:300ms;--dogi-motion-distance:8px}.dogi-motion-delay-1,.dogi-motion-delay-2{animation-delay:0ms}.hero-home .hero-copy-text,.hero-home .hero-buttons{animation-delay:60ms}.gallery-modal.show .gallery-full{animation-name:dogi-entrance}.btn:hover,.btn:focus-visible{transform:none}}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .dogi-motion-enter,.hero-home .hero-subtitle,.hero-home h1,.hero-home .hero-copy-text,.hero-home .hero-buttons,.page-hero h1,.gallery-modal.show .gallery-full,.cookie-panel:not([hidden]),[data-wizard-ready] .intake-step:not([hidden]),.cookie-categories:not([hidden]),.intake-client-error:not([hidden]),.field-error{animation:none;opacity:1;transform:none}
  .btn:hover,.btn:focus-visible,.btn:active,.cookie-actions button:hover,.gallery-modal button:hover,.gallery-grid a:hover img{transform:none}
  .site-header .desktop-navigation .nav-link::after{transition:none}
  .gallery-grid img,.gallery-grid a::after{transition:none}
}
@media print{.dogi-motion-enter{animation:none;opacity:1;transform:none}}
