상호작용 모션 — 전부 피드백 목적으로만

모션은 이유가 있어야 붙인다. 여기 넣은 것은 전부 '지금 이걸 보고 있다'
또는 '이건 눌린다'를 말한다. 장식 목적 애니메이션은 넣지 않았다.

- 유리 카드 29곳: 커서 아래에서 3px 떠오르고 그림자가 깊어진다
- 링크 2곳: 밑줄이 왼쪽에서 자란다
- 쇼케이스 판 2곳: 1.2% 다가온다
- 스파인 정거장: 마커가 커지고 인용선이 밝아진다

전부 transform 과 opacity 만 움직인다(하드 게이트 8).
prefers-reduced-motion 안에 넣어 모션을 줄이는 설정에서는 전부 사라진다.
This commit is contained in:
Yun Chan 2026-08-20 12:25:22 +09:00
parent 85be000704
commit ed1f335a89
9 changed files with 57 additions and 8 deletions

View file

@ -271,6 +271,46 @@ a:hover { color: var(--accent); }
.reveal.is-in { transform: none; }
}
/* ---- 상호작용 모션 ------------------------------------------
모션은 이유가 있어야 붙인다. 여기 있는 것은 전부 피드백이다.
"지금 이 카드를 보고 있다", "이 버튼은 눌린다" 말한다.
transform opacity 움직인다(하드 게이트 8). */
@media (prefers-reduced-motion: no-preference) {
/* 유리 카드는 커서 아래에서 아주 조금 떠오른다 */
.lift {
transition:
transform var(--dur-quick) var(--ease-out),
box-shadow var(--dur-quick) var(--ease-out);
}
.lift:hover {
transform: translate3d(0, -3px, 0);
box-shadow: var(--glass-hi), var(--shadow-3);
}
/* 링크 밑줄이 커서 쪽에서 자란다 */
.link-grow {
position: relative;
text-decoration: none;
}
.link-grow::after {
content: "";
position: absolute;
left: 0;
right: 0;
bottom: -3px;
height: 1px;
background: currentColor;
transform: scaleX(0);
transform-origin: left;
transition: transform var(--dur-quick) var(--ease-out);
}
.link-grow:hover::after { transform: scaleX(1); }
/* 쇼케이스 판은 들여다보면 조금 다가온다 */
.zoom-in { transition: transform var(--dur-normal) var(--ease-out); }
.zoom-in:hover { transform: scale(1.012); }
}
/* ---- 패럴랙스 -----------------------------------------------
scroll-driven animation 으로만 만든다. scroll 리스너는 쓰지 않는다.
움직이는 것은 transform 뿐이라 지원되지 않는 브라우저에서는