diff --git a/apps/site/design.md b/apps/site/design.md index 2141047..d8fd4c0 100644 --- a/apps/site/design.md +++ b/apps/site/design.md @@ -1213,3 +1213,4 @@ Pretendard `dynamic-subset` 은 유니코드 범위별로 파일을 쪼개고 - `2026-08-30` · 국소 — 기존 히어로의 8px 일회성 조립 계약을 대체한다. [Chrome 공식 stacking-cards 예시](https://scroll-driven-animations.style/demos/stacking-cards/css/)의 transform-only scrub 원칙을 참고하되 sticky 구간이나 빈 스크롤 길이는 만들지 않고, 7개 판·등록 핀·신호선을 `scroll(root block)`에 묶는다. 데스크톱은 문서 스크롤 `0→18vh`, 68rem 이하는 `0→58vh`에서 분산 상태와 조립 완료 상태 사이를 양방향으로 연속 보간하며, 미지원 브라우저·`prefers-reduced-motion`은 정적인 조립 완료 상태를 사용한다. KO/EN 변화·역스크롤 원복·감소 모션 불변·이펙트 제거 상태를 E2E 하드 게이트로 고정한다. - `2026-08-30` · 국소 — 히어로 아래 방향 결정·토큰 조판·검증 프레임과 7단계 진행 레일도 각각의 named CSS view timeline에 연결한다. 본문과 수치는 움직이지 않고 방향선·글립·토큰 표본·검사 화살표·짧은 진행선만 transform/opacity로 보간하며, 검증 프레임의 가장 넓은 판은 두 작은 판을 맞추는 고정 기준면으로 남긴다. 모바일 검증 완료 지점은 sticky GNB 아래 제목 여유 24px 이상에서 끝나도록 앞당기고, 미지원 브라우저·감소 모션·이펙트 제거 상태는 정적 완료 화면을 사용한다. KO/EN 전진·역스크롤 geometry 8개, 320~2560px 반응형, effects-off와 감소 모션을 80/80 시나리오·1000/1000 단언으로 고정한다. - `2026-08-30` · 국소 — 사용자 체감 실패를 반영해 방향 결정·토큰과 조판의 timeline subject를 article에서 실제 `.direction-stage`·`.type-stage`로 내리고, 방향 면·벡터·세 노드와 글립·세 토큰 표본을 각 자식의 첫 가시 시점 이후에 서로 다른 범위로 조립한다. 글자 대비는 opacity로 낮추지 않으며 미지원·감소 모션·이펙트 제거 상태는 정적 완료 화면이다. KO/EN × 390/1440에서 110px 실제 wheel 전진·역진, offscreen 진행 상한, 가시 구간 dwell, 독립 위상과 token stagger를 새 E2E 계약으로 추가했고 전체 85/85 시나리오·1094/1094 단언을 통과했다. +- `2026-08-30` · 사용자 실화면 정정 — Direction의 한 줄짜리 독립 변형을 폐기하고, 정확한 세 점 좌표를 공유하는 두 SVG 선분으로 나눠 시작점을 고정한 채 스크롤로 길이만 드러낸다. 노드는 이동하지 않고 앞 선분이 좌표에 닿은 뒤 같은 중심에서 나타나며, 모바일도 `xMidYMid meet`로 비율을 보존한다. 마지막 선과 점은 `cover 80% / 86%` 안에 끝내 sticky GNB 아래에서 완성 상태를 읽을 시간을 남긴다. Tokens는 글립·기준선·세 역할 표본, Verification은 두 가변 프레임·네 검사 화살표, Process는 작은 행 장식 대신 목록 전체 높이의 연속 진행선을 각 named view timeline으로 보간한다. 실제 앱 브라우저 1316×1272에서 110px 전진·역진과 Direction endpoint 연결을 확인했고, KO/EN 320~2560px 전체 게이트는 86/86 시나리오·1122/1122 단언·8/8 캡처로 통과했다. diff --git a/apps/site/src/components/Landing.astro b/apps/site/src/components/Landing.astro index 8653e96..0103d89 100644 --- a/apps/site/src/components/Landing.astro +++ b/apps/site/src/components/Landing.astro @@ -269,12 +269,30 @@ const copiedLabel = lang === "ko" ? "복사했어요" : "Copied"; } .stage-list { + position: relative; list-style: none; margin: 0; - padding: 0; + padding: 0 0 0 var(--space-5); border-top: var(--line-width) solid var(--line-inverse); } + .stage-list::before, + .stage-list::after { + content: ""; + position: absolute; + inset-block: 0; + inset-inline-start: 0; + width: 2px; + pointer-events: none; + } + + .stage-list::before { background: var(--line-inverse); } + .stage-list::after { + background: var(--accent); + transform-origin: top center; + scale: 1 1; + } + .stage-list li { position: relative; display: grid; @@ -297,24 +315,21 @@ const copiedLabel = lang === "ko" ? "복사했어요" : "Copied"; } @supports (animation-timeline: view()) { + .stage-list { + view-timeline-name: --process-list; + view-timeline-axis: block; + } + @media (prefers-reduced-motion: no-preference) { - .stage-list li::after { - content: ""; - position: absolute; - inset-inline-start: 0; - bottom: calc(var(--line-width) * -1); - width: 2.5rem; - height: var(--line-width); - background: var(--accent); - transform-origin: left center; - animation: stage-rail-register linear both; - animation-timeline: view(block); - animation-range: entry 12% cover 32%; + .stage-list::after { + animation: process-rail-fill linear both; + animation-timeline: --process-list; + animation-range: entry 0% cover 72%; } - @keyframes stage-rail-register { - from { opacity: 0.25; transform: scaleX(0); } - to { opacity: 1; transform: scaleX(1); } + @keyframes process-rail-fill { + from { scale: 1 0; } + to { scale: 1 1; } } } } @@ -458,6 +473,7 @@ const copiedLabel = lang === "ko" ? "복사했어요" : "Copied"; @media (prefers-reduced-motion: reduce) { .audit-details summary svg { transition: none; } + .stage-list::after { animation: none; scale: 1 1; } } @media (max-width: 68rem) { @@ -489,6 +505,7 @@ const copiedLabel = lang === "ko" ? "복사했어요" : "Copied"; grid-template-columns: 2rem minmax(0, 1fr); gap: var(--space-2) var(--space-4); } + .stage-list { padding-inline-start: var(--space-4); } .stage-list p { grid-column: 2; } } diff --git a/apps/site/src/components/OutputSpecimens.astro b/apps/site/src/components/OutputSpecimens.astro index 30f7a14..e82c419 100644 --- a/apps/site/src/components/OutputSpecimens.astro +++ b/apps/site/src/components/OutputSpecimens.astro @@ -62,14 +62,15 @@ const copy = lang === "en"
-
    @@ -94,8 +95,8 @@ const copy = lang === "en"