타자 사이 간격이 곧 호흡. 같은 문장이라도 치는 박자가 다르면 다른 문장이 된다.
구현
keystroke마다 이전 키와의performance.now()차이를gap으로 기록- 네 박자 분기:
- whisper ≤120ms — 흐린 blur 페이드 인
- steady ≤500ms — 짧은 Y 상승
- weighted ≤2000ms — 큰 낙차 + 스케일 바운스 (
cubic-bezier(0.34,1.25,0.6,1)) - anchored
> 2000ms— 깊은 blur(2px) + Y -16px
- 각 글자에
font-variation-settings: "wght" 380~720가변 폰트 축 조작 - 한글 IME 안전:
input이벤트 +inputType === "insertText"+native.data길이로 조합 확정된 글자 배치 (여러 자모가 한 번에 오면 첫 글자만 정상 gap, 나머지는 40ms whisper)
모바일 대응
- iOS Safari는
opacity: 0 + left: -9999pxhidden input을 focus 거절 →opacity: 0.01 + left: 0 + font-size: 16px + pointer-events: auto + z-index: -1로 교체 autoFocus는 coarse pointer에서 금지 — "글 쓰기 시작" 버튼으로 사용자 제스처 focusscrollIntoView({ block: "center" })로 모바일 키보드 올라올 때 display 영역 유지compositionstart/end로 한글 조합 완료 시점 캡처