diff --git a/apps/site/design.md b/apps/site/design.md index 80316f1..f13727c 100644 --- a/apps/site/design.md +++ b/apps/site/design.md @@ -168,6 +168,65 @@ WebGL 게이트: `prefers-reduced-motion` 이면 **아예 시작하지 않는다 - **언어 자동 리다이렉트 / 국기 아이콘** — 사용자를 놀라게 하고, 언어는 국가가 아니다 - **두 판을 번역으로 만들기** — 각 언어판을 따로 썼다 +## 3D 의 역할 — 주인공이 아니라 재질 + +**한 번 액자 안에 넣었다가 되돌렸다.** R2(lusion.co)의 "3D 는 액자 안"은 **3D 자체가 상품일 때**의 +규칙이다. 그 스튜디오는 3D 를 팔기 때문에 액자가 쇼케이스 프레임으로 정당하다. +우리는 절차를 파는데 액자 안에 넣을 상품이 없어서, 보는 사람이 "저 상자는 뭐냐"고 묻게 됐다. +게다가 의미를 `게이트 01 / 06` 판독기가 **자막으로 설명하고 있었다** — 그림이 스스로 말하지 +못해서 자막을 단 것이다. + +이 씬의 역할은 **재질**이다. 공간을 만드는 표면이지 볼거리가 아니다. 그래서 규칙이 반대다: + +| | 주인공(액자) | 재질(배경) — 현행 | +|---|---|---| +| 테두리 광 | 0.85 | **0.42** | +| 알파 | 0.72 | **0.34** | +| UV 경계 | `smoothstep(0, 0.05)` | **`smoothstep(0, 0.17)` + 제곱** | +| 카메라 이동 | 전 구간 | **60%** | +| 텍스트 | 액자 밖 | 위에 앉되 **스크림으로 자리를 눌러줌** | + +`ResizeObserver` 로 캔버스를 따라가게 했다. `window.resize` 만 듣던 동안 히어로 높이 변화를 +놓쳐 배경이 화면의 3분의 2만 덮고 아래가 검게 비었다. + +## 모션 문법 — 섹션마다 다른 말 + +같은 패럴랙스를 전부에 걸면 벽지다. 각 섹션의 주장을 움직임으로 옮겼다. + +| 섹션 | 주장 | 움직임 | +|---|---|---| +| 히어로 | 결정하지 않으면 기본값이 나온다 | 글자 ↑ / 배경 ↓ — **반대 방향**이라야 시차가 보인다 | +| 파이프라인 | 단계를 밟으면 결과가 나온다 | 단계명 **고정**, 산출물만 지연 | +| 사례 | 같은 스킬에서 다른 결과 | 두 판이 다른 속도 | +| 재료 | 표면은 한 겹이 아니다 | 타일이 서로 다른 깊이 | +| 프리플라이트 | 시간순 기록 | 뒤 항목일수록 늦게 | +| **수치** | 공개한 값은 검증 가능하다 | **없음 — 의도적 정지** | + +마지막 줄이 결정이다. 숫자가 스크롤에 흔들리면 그 값도 흔들려 보인다. + +## 디자인 SSOT + +토큰이 없어서 깨져 있던 세 축을 채웠다. + +- **웨이트 3종** — `400 / 500 / 600`. 이전에는 코드 곳곳에 `500·560·600·620·660` 이 흩어져 + **6종**이었고 셋은 토큰에 없는 값이었다. R1 모바일 실측은 `400` 이 832회, 나머지 12회다 +- **컨트롤 치수** — `--control-h: 44px` · `--control-h-sm: 36px` · `--control-pad-x`. + 버튼처럼 생긴 것은 전부 `.btn` + `.btn-solid` / `.btn-quiet` 를 쓴다. + 이전에는 두 버튼이 높이 36 vs 44, 패딩 16 vs 8, 테두리 1px vs 0, 웨이트 400 vs 500 이었다 +- **`--header-h`** — 떠 있는 헤더의 높이. 간격 토큰을 `clamp()` 로 바꾸는 순간 관계가 끊겨 + h1 이 헤더 뒤로 들어갔다. **값이 아니라 관계를 토큰으로 둔다** +- **반응형 간격** — `--space-5~8` 과 `--gutter` 를 `clamp()` 로. 고정이면 모바일에서 + 섹션 상하 112px 이 그대로 들어가 화면의 26% 를 여백이 먹는다 +- **스크롤바** — `scrollbar-color` 지정. 기본값이면 어두운 페이지 옆에 OS 색 밝은 막대가 선다 + +## 모바일 + +- 좌우 여백 24px → **32px** (R1 모바일 실측값) +- 섹션 상하 112px → **56px** +- 헤더에 섹션 앵커 4개 추가. 900px 미만에서는 `
` 기반 메뉴로 접힌다 — + JS 0바이트이고 열림 상태·Esc·포커스 순서·`aria-expanded` 를 브라우저가 맞게 한다 +- 390px 실렌더: 가로 스크롤 0, 대비 실패 0, 웨이트 3종, radius 2종 + ## 히어로 3D 의 형태 결정 - 판 **15 × 6** (액자 비율 2.5:1 과 일치). 첫 판이 화면을 완전히 덮어 이미 첫 게이트 안에 들어와 있다 diff --git a/apps/site/src/components/CopyCommand.astro b/apps/site/src/components/CopyCommand.astro index 4f9521b..07dbc32 100644 --- a/apps/site/src/components/CopyCommand.astro +++ b/apps/site/src/components/CopyCommand.astro @@ -12,7 +12,7 @@ const { command, copyLabel, copiedLabel, note } = Astro.props;
{command} -