/* ==========================================================================
   The Haven Group V2: shared polish for every page
   modal exits, image fade-in, page transitions, skip link, focus rings, reduced motion
   ========================================================================== */
:root{--fx-ease:cubic-bezier(.22,.61,.36,1);--fx-ease-in:cubic-bezier(.4,0,.2,1)}

/* utility: visible only to screen readers */
.sr{position:absolute!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;overflow:hidden!important;clip:rect(0 0 0 0)!important;clip-path:inset(50%)!important;white-space:nowrap!important;border:0!important}

/* skip link: first thing a keyboard user reaches */
.skip-link{position:fixed;left:12px;top:-64px;z-index:2000;padding:12px 18px;background:#fff;color:#171816;font:500 12px/1 Inter,Arial,sans-serif;letter-spacing:.14em;text-transform:uppercase;text-decoration:none;box-shadow:0 12px 30px rgba(0,0,0,.35);transition:top .25s var(--fx-ease)}
.skip-link:focus{top:12px;outline:2px solid #C31B37;outline-offset:2px}
main:focus{outline:0}

/* a clear focus ring for every control, unless a page defines a better one */
:where(a,button,input,select,textarea,summary,[tabindex]):focus-visible{outline:2px solid #FF4D6A;outline-offset:3px}
:where(.hxLinks a,.hxCard,.hxCityLink,.hxBars button,.hxPause,.gatewayItem,.exclusiveArrow,.siteBar a):focus-visible{outline:2px solid #fff;outline-offset:4px}

/* pop-up windows leave as smoothly as they arrive */
.fx-closing{animation:fxOut .3s var(--fx-ease-in) forwards!important;pointer-events:none}
.fx-closing .tm-box,.fx-closing .inv-box,.fx-closing .mb-box,.fx-closing .rs-lb-stage,.fx-closing .socv-stage{animation:fxBoxOut .3s var(--fx-ease-in) forwards!important}
@keyframes fxOut{to{opacity:0}}
@keyframes fxBoxOut{to{opacity:0;transform:translateY(14px) scale(.985)}}

/* images fade in as they arrive instead of popping */
.img-wait{opacity:0}
.img-in{animation:fxImg .8s var(--fx-ease) both}
@keyframes fxImg{from{opacity:0}to{opacity:1}}

/* pages without native cross-document transitions get a gentle fade */
.pg-fallback body{animation:fxPage .55s var(--fx-ease) both}
.pg-fallback.pg-out body{opacity:0;transition:opacity .22s var(--fx-ease-in);animation:none}
@keyframes fxPage{from{opacity:0}to{opacity:1}}

/* people who ask for less motion get none */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-delay:0s!important;animation-iteration-count:1!important;transition-duration:.001ms!important;transition-delay:0s!important;scroll-behavior:auto!important}
  .img-wait{opacity:1}
  .pg-fallback body{animation:none}
}

/* controls that are normally tucked away appear when a keyboard user reaches them */
.to-top:focus-visible,.moTop:focus-visible{opacity:1!important;transform:none!important;pointer-events:auto!important}

/* messages from the shared form check */
.hv-formmsg{grid-column:1/-1;margin:12px 0 0;padding:10px 14px;border-left:3px solid #C31B37;background:#fdf1f2;color:#7c0b19;font:500 13px/1.5 Inter,Arial,sans-serif}
.hv-formmsg:empty{display:none}
.hv-formmsg.ok{border-left-color:#1f6f45;background:#eef7f1;color:#1f6f45}
[aria-invalid="true"]{outline:2px solid #C31B37;outline-offset:1px}
