/* Movement is progressive enhancement: all content is visible without JavaScript. */
.motion-ready .site-header{position:fixed;z-index:50;transition:padding .45s ease,background .45s ease,box-shadow .45s ease;animation:header-arrive .8s .2s both}
.motion-ready .site-header.is-scrolled{padding-top:23px;padding-bottom:23px;background:rgba(13,23,32,.93);backdrop-filter:blur(16px);box-shadow:0 1px 0 #ffffff18}
.motion-ready .hero{background-image:none;overflow:hidden}
.motion-ready .hero::before{content:"";position:absolute;inset:0;z-index:-2;background:url("assets/office.webp") center/cover no-repeat;animation:scene-arrive 2.4s cubic-bezier(.18,.65,.3,1) both}
.brand-anchor{flex-shrink:0}
.floating-brand{position:fixed;z-index:60;top:0;left:50%;width:max-content;white-space:nowrap;transform-origin:center;will-change:transform;display:flex;color:#f6f3ed}
.floating-brand img{animation:mark-arrive 1.1s cubic-bezier(.16,1,.3,1) both}
.floating-brand>span,.floating-brand>small{animation:wordmark-arrive .9s .18s both}
.motion-ready .hero h1{animation:title-arrive 1.1s .32s cubic-bezier(.16,1,.3,1) both}
.motion-ready .hero-description{animation:copy-arrive .9s .48s both}
.motion-ready .hero-services{animation:copy-arrive .9s .62s both}
.motion-ready .hero-content>.button{animation:copy-arrive .9s .74s both}
.motion-ready .hero-location,.motion-ready .scroll-cue{animation:quiet-arrive 1s .95s both}
.motion-ready .scroll-cue>span{transform-origin:top;animation:scroll-breathe 2.5s 2s ease-in-out 3}
.motion-ready .reveal{opacity:0;transform:translateY(28px);transition:opacity .8s cubic-bezier(.2,.65,.3,1),transform .8s cubic-bezier(.2,.65,.3,1),background .25s;transition-delay:var(--reveal-delay,0ms)}
.motion-ready .reveal.is-visible{opacity:1;transform:none}
.practice-card .card-link span,.button span,.text-link span{transition:transform .25s ease}
/* Touch screens keep :hover after a tap, so hover effects are mouse-only. */
@media(hover:hover){
  .motion-ready .practice-card.is-visible:hover{background:#fff}
  .practice-card:hover .card-link span,.button:hover span,.text-link:hover span{transform:translateX(4px)}
}
dialog[open]{animation:dialog-arrive .3s cubic-bezier(.2,.65,.3,1)}
dialog[open]::backdrop{animation:quiet-arrive .3s both}
@keyframes scene-arrive{from{transform:scale(1.12)}to{transform:scale(1)}}
@keyframes header-arrive{from{opacity:0;transform:translateY(-16px)}to{opacity:1;transform:none}}
@keyframes mark-arrive{from{opacity:0;transform:scale(.9)}to{opacity:1;transform:none}}
@keyframes wordmark-arrive{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes title-arrive{from{opacity:0;filter:blur(8px);transform:translateY(30px)}to{opacity:1;filter:blur(0);transform:none}}
@keyframes copy-arrive{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
@keyframes quiet-arrive{from{opacity:0}to{opacity:1}}
@keyframes scroll-breathe{0%,100%{transform:scaleY(1);opacity:.8}50%{transform:scaleY(.55);opacity:.35}}
@keyframes dialog-arrive{from{opacity:0;transform:translateY(12px) scale(.985)}to{opacity:1;transform:none}}
@media(max-width:760px){
  .motion-ready .hero::before{background-position:56% center}
  .motion-ready .site-header.is-scrolled{padding-top:23px;padding-bottom:23px}
  .floating-brand.is-compact{pointer-events:none}
  body:has(#nav.open) .floating-brand{visibility:hidden}
  .motion-ready .reveal{transition-delay:0ms}
}
@media print{.motion-ready .reveal{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation:none!important;transition:none!important}
  .motion-ready .reveal{opacity:1;transform:none}
}
