/* motion.css — 스크롤 리빌 (UI-DESIGN-SYSTEM §1-5 「모션은 공기처럼」).
   페이드 + 12px 떠오름. **그 이상은 없다** — 스케일·회전·패럴랙스는 규범 밖이다.

   계약 하나만 기억하면 된다: **진입 상태(보임)가 기본값이다.**
   숨김 규칙은 전부 `.lc-motion` 아래에 있고, 그 클래스는 reveal.js 만 <html> 에 단다.
   JS 가 없거나·꺼졌거나·터지면 이 파일은 아무것도 숨기지 않는다(서버 렌더가 이미 다 냈다).

   색은 한 줄도 없다 — 토큰 규율(절대 지시 5)에 걸릴 일 자체를 만들지 않는다.
   중단점도 없다. 모션은 폭에 따라 달라지지 않는다(§5 의 셋을 넷째로 늘리지 않는다). */

.lc-motion .lc-rv {
  opacity: 0;
  /* ⭐ `transform` 이 아니라 **개별 `translate` 속성**을 쓴다. 카드 호버 리프트
     (`.vp-card:hover`·`.app-card:hover`)가 이미 transform 을 쓰고 있어서, 같은 속성을
     두고 다투면 리빌이 끝난 자리에서 호버가 죽거나 리빌이 호버에 튕긴다. 축이 다르면
     싸울 일이 없다. 미지원 브라우저는 이 한 줄만 버리고 페이드는 그대로 받는다. */
  translate: 0 12px;
  transition: opacity .5s cubic-bezier(.28,.11,.32,1),
              translate .5s cubic-bezier(.28,.11,.32,1);
}
.lc-motion .lc-rv.lc-rv-in { opacity: 1; translate: 0 0; }

/* 접근성 — 키보드 포커스가 아직 리빌되지 않은 요소에 닿으면 그 자리에서 즉시 보인다.
   숨김은 순전히 시각 효과다: `aria-hidden` 은 쓰지 않는다(스크린리더에는 처음부터 전부 있다). */
.lc-motion .lc-rv:focus-within { opacity: 1; translate: 0 0; }

/* 인쇄에는 움직임이 없다 — 리빌 전 상태로 굳은 백지가 나오지 않도록. */
@media print {
  .lc-motion .lc-rv { opacity: 1; translate: 0 0; }
}

/* 규범 §9 — 움직임 최소화. 전환 0.01s 로 낮추는 데서 그치지 않고 **리빌 자체를 무효**로
   돌린다(진입 상태 유지). 0.01s 짜리 깜박임도 그 사용자에겐 움직임이다. */
@media (prefers-reduced-motion: reduce) {
  .lc-motion .lc-rv {
    opacity: 1; translate: 0 0;
    transition-duration: .01s;
  }
}
