/* KBM V7 Motion & Micro Interaction — native, bounded, accessible. */
:root{
  --kbm-v7-fast:140ms;
  --kbm-v7-normal:220ms;
  --kbm-v7-slow:360ms;
  --kbm-v7-ease-standard:cubic-bezier(.2,.7,.2,1);
  --kbm-v7-ease-enter:cubic-bezier(.16,1,.3,1);
  --kbm-v7-focus:0 0 0 3px rgba(255,204,0,.28);
}


/* RC25 enabled cross-document View Transitions globally; V7 disables that broad
 * animation surface and keeps motion inside controlled KBM components only. */
::view-transition-old(root),::view-transition-new(root){animation:none!important}
/* Section reveal is opt-in from JS. If JS fails, content remains visible. */
html.kbm-motion-v7-js:not(.kbm-motion-v7-reduced):not(.kbm-motion-v7-low-power) .kbm-v7-reveal{
  opacity:0;
  transform:translate3d(0,14px,0);
  transition:opacity var(--kbm-v7-slow) ease,transform var(--kbm-v7-slow) var(--kbm-v7-ease-enter);
  transition-delay:var(--kbm-v7-delay,0ms);
}
html.kbm-motion-v7-js:not(.kbm-motion-v7-reduced):not(.kbm-motion-v7-low-power) .kbm-v7-reveal.is-kbm-v7-visible{
  opacity:1;
  transform:none;
}
html.kbm-motion-v7-js.kbm-motion-v7-low-power .kbm-v7-reveal{opacity:1;transform:none}

/* One subtle hover contract. V7 intentionally retires tilt/magnetic/parallax. */
@media (hover:hover) and (pointer:fine){
  body.kbm-motion-v7 :is(.kbm-card2,.kbm-article-card,.kbm-tender-card,.kbm-contact-card,.kbm-sch21-card,.kbm-prm-card,.kbm-provider-card):not(.is-expired){
    transition:transform var(--kbm-v7-normal) var(--kbm-v7-ease-standard),box-shadow var(--kbm-v7-normal) ease,border-color var(--kbm-v7-normal) ease!important;
  }
  body.kbm-motion-v7 :is(.kbm-card2,.kbm-article-card,.kbm-tender-card,.kbm-contact-card,.kbm-sch21-card,.kbm-prm-card,.kbm-provider-card):not(.is-expired):hover{
    transform:translate3d(0,-2px,0)!important;
  }
  body.kbm-motion-v7 .kbm-card2:not(.is-expired):hover .kbm-card2__image{
    transform:scale(1.015)!important;
  }
}

/* Tap / press feedback without layout shift. */
body.kbm-motion-v7 :is(button,a,[role="button"],input[type="submit"],input[type="button"]).is-kbm-v7-pressed{
  transform:scale(.985)!important;
  transition-duration:80ms!important;
}
body.kbm-motion-v7 :is(button,a,[role="button"],input[type="submit"],input[type="button"]):focus-visible{
  outline:2px solid #0f2942!important;
  outline-offset:2px!important;
  box-shadow:var(--kbm-v7-focus)!important;
}

/* Loading/success is state-only: no text rewriting and no duplicate handlers. */
body.kbm-motion-v7 :is(button,input[type="submit"]).is-kbm-v7-loading{
  position:relative!important;
  pointer-events:none!important;
  opacity:.78!important;
}
body.kbm-motion-v7 button.is-kbm-v7-loading::after{
  content:"";
  display:inline-block;
  width:14px;height:14px;
  margin-inline-start:8px;
  border:2px solid currentColor;
  border-inline-end-color:transparent;
  border-radius:50%;
  vertical-align:-2px;
  animation:kbmV7Spin .72s linear infinite;
}
body.kbm-motion-v7 :is(button,input[type="submit"]).is-kbm-v7-success{
  box-shadow:0 0 0 4px rgba(22,163,74,.14)!important;
}
@keyframes kbmV7Spin{to{transform:rotate(360deg)}}

/* V5 Filter UX: keep its state machine, upgrade only the transition contract. */
@media (max-width:1024px){
  body.kbm-motion-v7.kbm-filter-pro-active .kbm-filter-pro-sheet{
    transition:transform var(--kbm-v7-slow) var(--kbm-v7-ease-enter),visibility var(--kbm-v7-slow) step-end!important;
    will-change:auto;
  }
  html.kbm-v7-filter-open body.kbm-motion-v7.kbm-filter-pro-active .kbm-filter-pro-sheet,
  body.kbm-motion-v7.kbm-filter-pro-active .kbm-filter-pro-sheet.is-kbm-filter-pro-open{
    will-change:transform;
  }
  body.kbm-motion-v7 .kbm-filter-pro-backdrop{
    transition:opacity var(--kbm-v7-normal) ease,visibility var(--kbm-v7-normal) step-end!important;
  }
  body.kbm-motion-v7 .kbm-filter-pro-trigger.is-kbm-v7-pulse{
    animation:kbmV7FilterPulse .38s var(--kbm-v7-ease-enter) 1;
  }
}
@keyframes kbmV7FilterPulse{0%,100%{transform:none}45%{transform:scale(1.025)}}

/* Single-page galleries: animate only media replacement, never intercept native gallery JS. */
body.kbm-motion-v7-single :is(
  .kbm-gallery-mainimg,
  .kbm-m40-gallery__main img,
  [data-kbm-ps132-gallery-main],
  .kbm-ps73-gallery img,
  .kbm-c112-gallery .is-main img,
  .kbm-c112-lightbox img,
  [data-kbm-gallery-viewport] .is-active img
){
  transition:opacity var(--kbm-v7-normal) ease,transform var(--kbm-v7-normal) var(--kbm-v7-ease-standard),filter var(--kbm-v7-normal) ease!important;
}
body.kbm-motion-v7-single :is(
  .kbm-gallery-mainimg,
  .kbm-m40-gallery__main img,
  [data-kbm-ps132-gallery-main],
  .kbm-ps73-gallery img,
  .kbm-c112-gallery .is-main img,
  .kbm-c112-lightbox img,
  [data-kbm-gallery-viewport] .is-active img
).is-kbm-v7-media-enter{
  animation:kbmV7MediaEnter .28s var(--kbm-v7-ease-enter) 1;
}
@keyframes kbmV7MediaEnter{
  from{opacity:.55;transform:scale(.992);filter:saturate(.88)}
  to{opacity:1;transform:none;filter:none}
}

body.kbm-motion-v7-single :is(.kbm-lightbox.is-open,.kbm-ps73-lightbox:not([hidden])) img,
body.kbm-motion-v7-single .kbm-c112-lightbox[open] img{
  animation:kbmV7LightboxIn var(--kbm-v7-normal) var(--kbm-v7-ease-enter) 1;
}
@keyframes kbmV7LightboxIn{from{opacity:.4;transform:scale(.985)}to{opacity:1;transform:none}}

/* Fixed CTA/button feedback must not displace the Theme appbar. */
body.kbm-motion-v7-single :is(.kbm-v6-mobile-cta,.kbm-ad-single-recode-bottombar,.kbm-c112-sticky){
  transition:box-shadow var(--kbm-v7-normal) ease,background-color var(--kbm-v7-normal) ease!important;
}

/* System preference is absolute. */
@media (prefers-reduced-motion:reduce){
  html.kbm-motion-v7-js .kbm-v7-reveal,
  body.kbm-motion-v7 *,body.kbm-motion-v7 *::before,body.kbm-motion-v7 *::after{
    scroll-behavior:auto!important;
    animation-duration:.001ms!important;
    animation-iteration-count:1!important;
    transition-duration:.001ms!important;
  }
  html.kbm-motion-v7-js .kbm-v7-reveal{opacity:1!important;transform:none!important}
  body.kbm-motion-v7 :is(.kbm-card2,.kbm-article-card,.kbm-tender-card,.kbm-contact-card,.kbm-sch21-card):hover{transform:none!important}
  body.kbm-motion-v7 .kbm-card2:hover .kbm-card2__image{transform:none!important}
  body.kbm-motion-v7 button.is-kbm-v7-loading::after{animation:none!important;border-inline-end-color:currentColor!important}
}
