/* Walin motion: measured entrances, tactile details, no continuous movement. */
:root{--ease-out:cubic-bezier(.22,1,.36,1);--ease-soft:cubic-bezier(.25,.65,.3,1)}
.nav a,.footer-grid a,.text-link,.line-list a,.faq-item summary{transition:color .25s,background-color .25s}
.nav>a:not(.nav-cta){position:relative}
.nav>a:not(.nav-cta):after{content:'';position:absolute;left:0;right:0;bottom:1px;height:1px;background:var(--gold);transform:scaleX(0);transform-origin:left;transition:transform .35s var(--ease-out)}
.nav>a[aria-current=page]:after,.nav>a:focus-visible:after{transform:scaleX(1)}
.button,.nav-cta{transition:background-color .3s,color .3s,border-color .3s,box-shadow .3s,transform .3s var(--ease-out)}
.button>span,.text-link>span,.line-list a>span,.card-corner,.photo-zoom{transition:transform .35s var(--ease-out),background-color .3s,color .3s}
.service-card,.directory-card,.work-gallery .work-card,.credential-cards li{transition:border-color .35s,box-shadow .35s,background-color .35s,transform .4s var(--ease-out)}
.image-panel>img,.home-service-photo img,.card-photo>img,.work-photo>img,.office-story-image img,.mast-image img{transition:transform .8s var(--ease-out)}
.owner-portrait>img{transition:transform 1s var(--ease-out)}
.portrait-frame{transition:border-color .5s,background-color .5s}
.credential-icon,.strip-icon{transition:background-color .3s,color .3s,transform .4s var(--ease-out)}
.slider-arrow:before{transition:translate .3s var(--ease-out)}
.button:active{transform:translateY(0) scale(.985)}
.text-link:focus-visible>span,.button:focus-visible>span{transform:translate(3px,-2px)}
@media(hover:hover) and (pointer:fine){
  .nav>a:hover:after{transform:scaleX(1)}
  .button:hover{transform:translateY(-2px);box-shadow:0 7px 18px #102b3d12}
  .button:hover>span,.text-link:hover>span{transform:translate(3px,-2px)}
  .line-list a:hover{background:#b89b6b0b}.line-list a:hover>span{transform:translateX(4px)}
  .service-card:hover,.directory-card:hover,.work-gallery .work-card:hover{border-color:#b89b6b88;box-shadow:0 12px 32px #102b3d0d;transform:none}
  .service-card:hover .home-service-photo img,.directory-card:hover .card-photo>img,.work-photo:hover>img{transform:scale(1.045)}
  .image-panel:hover>img,.office-story-image:hover img,.mast-image:hover img{transform:scale(1.025)}
  .owner-portrait:hover>img{transform:scale(1.015)}
  .owner-portrait:hover .portrait-frame{border-color:var(--gold-dark);background:#b89b6b09}
  .work-photo:hover .photo-zoom{transform:scale(1.08);background:#24485c}
  .credential-cards li:hover{border-color:#b89b6b99;background:#fff}
  .credential-cards li:hover .credential-icon,.strip-inner>a:hover .strip-icon{background:#24485c;color:#ffe0ae;transform:translateY(-2px)}
  .slider-arrow:hover:not(:disabled):before{translate:3px 0}
  .slider-arrow[data-slide-prev]:hover:not(:disabled):before,.slider-arrow[data-review-prev]:hover:not(:disabled):before{translate:-3px 0}
  .faq-item summary:hover{color:var(--gold-dark)}
}
@media(prefers-reduced-motion:no-preference){
  /* Separate image and copy timing keeps the banner from moving as one block. */
  [data-slideshow].is-ready [data-slide]:not([hidden]){animation:none}
  .hero.is-ready [data-slide]:not([hidden]) .hero-photo{animation:walin-image-in .85s var(--ease-out) both}
  .hero.is-ready [data-slide]:not([hidden]) .hero-inner{animation:walin-copy-in .65s .07s var(--ease-out) both}
  .work-carousel.is-ready [data-slide]:not([hidden]) .work-photo{animation:walin-copy-in .5s var(--ease-out) both}
  .work-carousel.is-ready [data-slide]:not([hidden]) figcaption{animation:walin-copy-in .45s .08s var(--ease-out) both}
  .mast-copy{animation:walin-copy-in .65s var(--ease-out) both}
  .contact-options{animation:none}
  .contact-options:not([hidden]) .contact-option{animation:walin-contact-in .28s var(--ease-out) backwards}
  .contact-options:not([hidden]) .contact-option:nth-child(1){animation-delay:.12s}
  .contact-options:not([hidden]) .contact-option:nth-child(2){animation-delay:.09s}
  .contact-options:not([hidden]) .contact-option:nth-child(3){animation-delay:.06s}
  .contact-options:not([hidden]) .contact-option:nth-child(4){animation-delay:.03s}
  .faq-item[open] .faq-answer{animation:walin-copy-in .3s var(--ease-out)}
  .gallery-dialog[open],.cookie-dialog[open]{animation:walin-dialog-in .25s var(--ease-out)}
  .gallery-dialog[open]::backdrop,.cookie-dialog[open]::backdrop{animation:walin-backdrop-in .25s ease-out}
  .gallery-dialog,.cookie-dialog{transition:opacity .18s,display .18s allow-discrete,overlay .18s allow-discrete;opacity:0}
  .gallery-dialog[open],.cookie-dialog[open]{opacity:1}
  @media(max-width:900px){.nav.is-open{animation:walin-copy-in .25s var(--ease-out)}}
  @media(max-width:600px){.hero.is-ready [data-slide]:not([hidden]) .hero-photo{animation-duration:.5s}.hero.is-ready [data-slide]:not([hidden]) .hero-inner{animation-duration:.45s}}
}
@keyframes walin-copy-in{from{opacity:.2;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}
@keyframes walin-image-in{from{opacity:.65;transform:scale(1.025)}to{opacity:1;transform:scale(1)}}
@keyframes walin-contact-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@keyframes walin-dialog-in{from{opacity:0;transform:translateY(8px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes walin-backdrop-in{from{opacity:0}to{opacity:1}}
/* Native disclosure height transitions where supported; native behaviour elsewhere. */
@supports(interpolate-size:allow-keywords){
  @media(prefers-reduced-motion:no-preference){
    .faq-item{interpolate-size:allow-keywords}
    .faq-item::details-content{height:0;overflow:clip;transition:height .32s var(--ease-soft),content-visibility .32s allow-discrete}
    .faq-item[open]::details-content{height:auto}
  }
}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
}
@media print{*,*:before,*:after{animation:none!important;transition:none!important}}
