/* house-motion.css — owner: kevin-opencode-1 (MOTION_SPEC). Enqueued after child style. */
/* Cross-document View Transitions: slow gradient curtain wipe.
   A soft red-to-white band sweeps right-to-left; the old page wipes out just
   ahead of it and the new page wipes in just behind, all on one timing curve
   so it reads as a single seamless motion. Chromium-only, zero JS. */
@view-transition {
  navigation: auto;
}
::view-transition {
  background: #fff;
  background-image: linear-gradient(90deg, rgba(255, 255, 255, 0) 40%, rgba(255, 255, 255, .45) 48%, rgba(180, 29, 33, .5) 55%, rgba(180, 29, 33, 0) 63%);
  background-size: 220% 100%;
  background-repeat: no-repeat;
  animation: vt-band 1.1s cubic-bezier(.65, 0, .35, 1) both;
}
::view-transition-old(root) {
  animation: vt-wipe-out 1.1s cubic-bezier(.65, 0, .35, 1) both;
}
::view-transition-new(root) {
  animation: vt-wipe-in 1.1s cubic-bezier(.65, 0, .35, 1) both;
}
@keyframes vt-band {
  from {
    background-position: 108% 0;
  }
  to {
    background-position: -8% 0;
  }
}
@keyframes vt-wipe-out {
  0% {
    clip-path: inset(0 0 0 0);
  }
  88%, 100% {
    clip-path: inset(0 0 0 100%);
  }
}
@keyframes vt-wipe-in {
  0%, 12% {
    clip-path: inset(0 100% 0 0);
  }
  100% {
    clip-path: inset(0 0 0 0);
  }
}
@media (prefers-reduced-motion: reduce) {
  ::view-transition-group(*),
  ::view-transition-old(*),
  ::view-transition-new(*) {
    animation: none !important;
  }
}

/* House motion system — PRODUCTION BLOCK (mirrored live in Neuros-Child style.css).
 * MOTION_SPEC v1.0 §4. Local master: motion-spike/motion-state.css
 *
 * Why !important on transition ONLY: Elementor regenerates per-page CSS
 * (uploads/elementor/css/post-*.css) with transition rules up to (0,3,0),
 * e.g. `.elementor-24348 .elementor-element.elementor-element-ab99f35`,
 * which beat `.motion-ok .rv` (0,2,0) and silently killed interpolation
 * (verified 2026-09-22: CTA popped instead of animating). Chasing generated
 * specificity is a losing game; a scoped !important on our own transition
 * property is the sanctioned exception. Opacity/transform/visibility need
 * no !important — nothing contests those declarations.
 */
.rv, .rv-group > * { opacity: 1; }
.motion-ok .rv {
  opacity: 0; transform: translateY(28px); visibility: hidden;
  transition: opacity .7s cubic-bezier(.22,1,.36,1), transform .7s cubic-bezier(.22,1,.36,1), visibility 0s .7s !important;
}
.motion-ok .rv[data-rv="left"], .motion-ok .rv.rv-left { transform: translateX(-40px); }
.motion-ok .rv[data-rv="right"], .motion-ok .rv.rv-right { transform: translateX(40px); }
.motion-ok .rv[data-rv="scale"], .motion-ok .rv.rv-scale { transform: scale(.93); }
.motion-ok .rv-group > * {
  opacity: 0; transform: translateY(24px); visibility: hidden;
  transition: opacity .6s cubic-bezier(.22,1,.36,1), transform .6s cubic-bezier(.22,1,.36,1), visibility 0s .6s !important;
}
.motion-ok .rv.in, .motion-ok .rv-group > *.in {
  opacity: 1; transform: none; visibility: visible;
  transition: opacity .7s cubic-bezier(.22,1,.36,1), transform .7s cubic-bezier(.22,1,.36,1), visibility 0s 0s !important;
}
@media (prefers-reduced-motion: reduce) {
  .motion-ok .rv, .motion-ok .rv-group > * { opacity: 1 !important; transform: none !important; transition: none !important; }
}
