/* ===========================================================================
   HOUSE MOTION VERBS (imported by the live collage pages; the forks they came
   from were promoted 2026-06-10)
   The grammar: on a paper site nothing fades. Things are either printed
   or not yet printed.
     PRINTED  [data-print]        hard-edge clip wipe uncovers the element
     SET      [data-set]          type rises from behind its own baseline
     STAMPED  [data-stamp]        one fast 120-160ms snap, no rotation
   All states default to VISIBLE; only html.anim hides pre-entrance states,
   so reduced-motion and no-JS read as the printed page.
   =========================================================================== */

/* PRINTED: top edge sweeps down by default; data-print="left|right" sweeps
   sideways. End state overshoots to -48px so box-shadows are already inside
   the clip when the engine later clears it (no shadow pop). */
.anim [data-print]{clip-path:inset(0 0 100% 0);transition:clip-path .65s cubic-bezier(.25,1,.5,1);transition-delay:var(--d,0s)}
.anim [data-print="left"]{clip-path:inset(0 100% 0 0)}
.anim [data-print="right"]{clip-path:inset(0 0 0 100%)}
.anim [data-print].in{clip-path:inset(-48px)}

/* SET: the letterpress rise. Single-element clip + small rise reads as type
   being composed onto the baseline without needing a mask wrapper. */
.anim [data-set]{clip-path:inset(0 0 100% 0);transform:translateY(.35em);
  transition:clip-path .6s cubic-bezier(.22,1,.36,1),transform .6s cubic-bezier(.22,1,.36,1);transition-delay:var(--d,0s)}
.anim [data-set].in{clip-path:inset(0 0 -0.2em 0);transform:none}

/* STAMPED: opacity snaps (steps, no fade), scale lands hard. Uses the
   independent `scale` property so existing transform rotations survive. */
@keyframes m-stamp{0%{opacity:0;scale:1.2}1%{opacity:1}62%{scale:.985}100%{opacity:1;scale:1}}
.anim [data-stamp]{opacity:0}
.anim [data-stamp].in{animation:m-stamp .16s cubic-bezier(.2,.6,.4,1) both;animation-delay:var(--d,0s)}

/* DRAFT-LIFT: air in the room. Animates the independent `translate` property
   so hover transforms on the same element keep working. Max 3px, no rotation. */
@media (prefers-reduced-motion:no-preference){
  @keyframes m-draft{0%,100%{translate:0 0}50%{translate:0 -2.5px}}
  .m-draft{animation:m-draft 14s ease-in-out infinite}
  .m-draft.alt{animation-duration:19s;animation-delay:-7s}
}

/* Lenis base: kill native CSS smooth-scroll while Lenis drives */
html.lenis,html.lenis body{height:auto}
html.lenis{scroll-behavior:auto!important}
.lenis.lenis-stopped{overflow:hidden}
