/* LotRevive v3 motion layer, driven by /js/motion.js. Opacity, translate, scale and stroke dashes only; calm curves from
   /styles.css (--ease-out, --ease-in-out). Every hidden state here is added by motion.js, and only to elements still below
   the fold, so no-JS, reduced motion and print render the complete page. Fallback values keep this file working alone. */

/* ── Reveal: .mo-wait is the waiting state, .mo-in plays it once (motion.js removes both afterwards) ── */
.mo-wait { opacity: 0; translate: 0 var(--mo-y, 12px); }
.mo-wait[data-mo="fade"] { translate: none; }
/* Hairline (div/hr with .mo-line or kind 'line'): draws along its own axis from --mo-origin (default: the left end). */
.mo-wait[data-mo="line"] { opacity: 1; translate: none; scale: 0 1; transform-origin: var(--mo-origin, left center); }
.mo-wait.mo-in { animation: mo-in var(--mo-dur, 600ms) var(--ease-out, cubic-bezier(.16, 1, .3, 1)) var(--mo-d, 0ms) both; }
.mo-wait[data-mo="line"].mo-in { animation-timing-function: var(--ease-in-out, cubic-bezier(.65, 0, .35, 1)); }
/* Only a "to" frame: each variant animates from its own waiting state above. */
@keyframes mo-in { to { opacity: 1; translate: none; scale: none; } }

/* ── SVG line drawing: motion.js sets pathLength="1" on each stroke, so one dash covers any path at any scale ── */
.mo-stroke { stroke-dasharray: 1 1; stroke-dashoffset: 1; }
.mo-drawn .mo-stroke, .mo-stroke.mo-drawn { stroke-dashoffset: 0; transition: stroke-dashoffset var(--mo-dur, 1200ms) var(--ease-in-out, cubic-bezier(.65, 0, .35, 1)) var(--mo-d, 0ms); }

/* ── Load entrances page sheets may use with CSS alone (they start at first paint, so above-the-fold content can move too).
   Add .mo-seen to an element to keep one from replaying after motion.js revealed it. ── */
@keyframes mo-rise { from { opacity: 0; translate: 0 var(--mo-y, 12px); } }
@keyframes mo-fade { from { opacity: 0; } }
@keyframes mo-glide { from { translate: 0 var(--mo-y, 10px); } }
@keyframes mo-draw-x { from { scale: 0 1; } }

/* ── Safety nets: never leave anything waiting in reduced motion or on paper ── */
@media (prefers-reduced-motion: reduce) {
  .mo-wait { opacity: 1 !important; translate: none !important; scale: none !important; animation: none !important; }
  .mo-stroke { stroke-dasharray: none !important; stroke-dashoffset: 0 !important; transition: none !important; }
}
@media print {
  .mo-wait { opacity: 1 !important; translate: none !important; scale: none !important; animation: none !important; }
  .mo-stroke { stroke-dasharray: none !important; stroke-dashoffset: 0 !important; }
}
