feat(site): rework 19 marketing showcases for composition diversity
Some checks are pending
ci / build (push) Waiting to run

Measured convergence before: split hero 13/19, top-bar nav 19/19,
one-line notice footer 14/19, body Pretendard 17/21, 10 similarity
pairs above 0.78. Each showcase got a pre-assigned hero family, nav
form, footer form, type pair, background, accent hue, radius, motion
grammar and material from outputs/rework-2026-10-06/plan.md; direction
cards and the chosen reason are recorded in every design.md.

After: 0 similarity warnings, 19 distinct display faces, 7 hero
families, 5 nav forms, 5 footer forms, no scroll reveals, 5 showcases
with SVG filter materials. Example contact values replace bracket
placeholders under the existing fictional-brand notices. Thumbnails,
OG images, card copy and three e2e assertions updated; dead CSS in
dure-enrollment and hannam-jari removed; similarity.mjs learns the new
font families.
This commit is contained in:
Yun Chan 2026-10-06 16:55:50 +09:00
parent 88c11682b1
commit 8e3cdb0d3b
296 changed files with 19131 additions and 17538 deletions

View file

@ -1,31 +1,106 @@
# 새벽청과 — 2026-09-12 화면 보정 기록
# design.md — 새벽청과 (2026-10-06 재작업)
## 구도·타입·색 관찰
## 진행 상태
- 새벽 시장 사진과 제목은 시간·시장 맥락을 만들지만, 투명한 표는 사진의 명암 위에서 숫자 기준선을 잃는다.
- 낙찰가·단위·등락은 색보다 자리와 숫자 정렬로 먼저 읽혀야 한다.
- 종이·잉크·새벽 남색이라는 기존 `market-board` 토큰은 과일 사진의 색을 방해하지 않는 핵심 자산이다.
- 0단계 완료 — 현행 감사(띠 7개 교대·전면 사진 히어로·상단 바·가운뎃점 라벨), 보존 자산 확정
- 1단계 완료 — R1 KAMIS 실측, R2 phillips·natoora(기존 실측 재사용), R3 APG Tabs, garak 미검증
- 2단계 완료 — 카드 3장 가운데 A "시세표 한 장" 선택(위임)
- 3단계 완료 — tokens.css 재정의(Gasoek One / Noto Sans KR, #e4e8f4, 140° 녹, radius 4px)
- 4단계 완료 — 레이아웃 → 모션(카운터). 재질 없음
- 5단계 완료 — html-validate·stylelint·no-hanja·showcase-audit·design-gate 통과, E2E 1건 예정된 깨짐(아래)
- 6단계 완료 — 이 문서
## 근거 확인 범위
## 브리프
- `outputs/full-showcase-upgrade-20260912/screenshots/saebyeok-cheonggwa/1440x1000-first.png`
- `index.html`, `styles/main.css`, 날짜·선택 로트·제철·납품 계산 스크립트
- 기존 표의 예시 시세·단위·거래 한계 라벨을 보존한다.
- 청과 도매 직거래 "새벽청과". 새벽 경매에서 낙찰받은 과일의 산지·등급·당도·규격·낙찰가를 공개하고 그날 아침 보낸다. 카페·식당 납품은 전날 21:00 마감, 품목당 3상자부터.
- 방문자: 매일 과일 값을 확인하는 매장 사장. 목표 행동: 오늘 낙찰가를 읽고 상자 수로 기준 금액을 계산해 발주 메모를 남긴다.
- 배정 제약(outputs/rework-2026-10-06/plan.md): 데이터·도구가 주인 히어로(시세표 첫 화면, 표제 작게) · 탭·세그먼트 내비(품목/일자) · 연락처·영업시간 카드 푸터 · Gasoek One / Noto Sans KR · 밝음·쿨 새벽 #e4e8f4, 띠 교대 제거 · 140° 녹 · radius 4px · 숫자 카운터 · 재질 없음 · 흘림 이미지.
- 화면: index.html 한 장. 2차 페이지 없음.
## 결정 / 기각 조건
## 미확정
- 사진과 제목은 어두운 상단에서 유지하고, 시세표·선택 로트·예시 안내는 불투명한 밝은 종이 표면으로 분리한다.
- 가격과 단위는 tabular 숫자와 우측 정렬을 유지하고, 표면 머리에서 예시 시세표임을 인접 표기한다.
- 사진 위 반투명 표, 숫자만 색으로 구분하는 변화, 모바일에서 정보를 버리는 축소는 기각한다.
- 푸터 카드의 점포 위치·전화·메일은 예시 값이다(사용자 결정 2026-10-06, 푸터 고지에 명시). 실제 상호가 정해지면 세 칸만 바꾼다.
- 시세표의 품목·가격·시간은 예시 값이다(표 아래와 푸터에 고지). 전일 낙찰가는 오늘 값에서 전일 대비를 뺀 계산값이다(일자별 탭 아래에 적음).
## 토큰·규칙
## 레퍼런스
- 기존 `--surface`, `--ink`, `--line`, `--accent`, `--dark-*`와 모노 서체만 사용한다.
- 모바일은 기존 라벨 카드 뷰를 유지해 모든 열 정보를 보존한다.
- 선택 상태는 `aria-pressed`, 키보드 focus, 좌측 신호선과 종이 표면의 대비로 함께 표시한다.
| 슬롯 | 출처 | 가져온 원리 |
|---|---|---|
| R1 구조 | KAMIS 중도매인 판매가격 https://www.kamis.or.kr/customer/price/wholesale/item.do (2026-10-06 텍스트 페처) | 표제는 작고, 날짜·품목·등급 선택 UI 바로 아래 시세표가 온다. 일자가 열로 선다 → 일자별 탭 |
| R2 톤 | phillips.com (2026-08-24 실측 재사용) | 날짜·경매 상태가 제목보다 앞에 선다. 화면은 무채에 가깝고 출품작만 색을 갖는다 |
| R2′ 같은 시장 | natoora.com (2026-08-24 실측 재사용) | 품목마다 산지를 문장으로 붙인다 |
| R3 디테일 | WAI-ARIA APG Tabs (accessibility.md §4.2·§4.4) | roving tabindex, 화살표 wrap, Home/End, 자동 활성화 |
| 미검증 | garak.co.kr (페처가 링크 모음만 반환) | 경매 시각 02:00/08:30은 기존 사실 근거(tokens.css 머리)를 유지 |
## 2026-09-12 현재 검증 기록
## 방향
- `verify-final` 18개 묶음은 16개가 즉시 통과했다. 전체 묶음의 invariant·visual 검사는 Gaon·Dure를 대상으로 하며, 나머지 2개는 수정 뒤 release 독립 재실행에서 ALL PASS·ALL MATCH였다.
- root는 28개 모바일, 21개 데스크톱, 7개 하위 경로와 30개 앱 상태를 직접 검토해 수용했다. stress 112건은 hard failure 0이며, 가로 넘침 4건은 targeted fix 뒤 390px 재측정에서 0이다.
- 이 기록은 렌더·계약 범위의 현재 결과다. 모든 폭·키보드 경로·인쇄 등 개별 기능을 완전 재실행했다는 뜻이 아니며, 참여자 과업 효과도 미측정이다.
지문: 히어로 데이터·도구(시세표 한 장) · Gasoek One / Noto Sans KR · 밝음·쿨 #e4e8f4 · 140° 녹 #22673a · radius 4px · 흐름 "시세표(품목/일자 탭) + 선택 로트 → 읽는 법 + 유통 5단계(새벽 통로 사진 왼쪽 흘림) → 입고 사진 3장 흘림 + 제철 달력 → 납품 조건 + 수량 계산 → 연락처·영업시간 카드 푸터" · 내비 탭·세그먼트(고정 없음) · 푸터 연락처·영업시간 카드 · 이미지 화면 가장자리 흘림, 캡션 옆 · 모션 낙찰가 카운터(전일가 → 오늘가, 감소 모션은 즉시)
컨셉: 카페·식당 사장이 오늘 새벽 낙찰가를 품목별로 한 표에서 읽고, 상자 수로 기준 금액을 계산해 발주 메모를 남긴다.
프리셋: quiet-commerce 뼈대에 "값이 주인"인 시세표. 단일 스타일, 리믹스 아님.
표현 리스크: Gasoek One을 낙찰가 숫자(36~52px)에 쓴다 — 표의 숫자가 표제보다 큰 것이 이 페이지의 긴장이다. 검증: 1440·390 캡처에서 숫자 열이 첫 시선인지(흐림 사본) 확인했다.
체크포인트(위임): A 시세표 한 장(선택) / B 품목 카드 6장(기각 — 열 비교를 잃고 격자 패밀리로 넘어감) / C 등락 보드(기각 — 7일 가격은 브리프에 없는 값). A를 고른 이유: 배정이 "시세표가 첫 화면"이고 R1 KAMIS가 선택 UI 아래 표를 두며, 기존 E2E가 한 표에서 6행을 고르는 동작을 단언한다.
반사실: 첫 화면 고유 요소 — 6품목 낙찰가·전일 대비 값, 02:00/08:30 경매 시각, 당도 Bx 열과 무화과 "—". 같은 업종 치환에서 값이 전부 바뀌어야 하고, 다른 업종 치환에서 낙찰가·전일 대비·경매 열이 무의미하다 → 통과.
수렴(같은 세션 cheongon-care·rfs-cfd — 셋 다 "도구가 주인" 배정): B-1 구도 같음, 표제 서체·CTA 다름, eyebrow·캡션은 셋 다 없음(없음을 같음으로 세면 3/5). B-2 섹션 흐름 첫 블록만 같고 내비·푸터·이미지 처리·모션·글 묶음 다름 → 1/6 통과. 구도 패밀리가 같은 것은 plan.md 배정(분포 상한 4)이다.
보존 자산: 시세표 6행 데이터와 선택 로트 동기화, 제철 달력 8품목, 발주 계산·복사, 날짜 도장 스크립트, 이미지 4장, 사실 문구 전부.
## 토큰과 예산
값은 `styles/tokens.css` 한 곳. 역할: 바탕 #e4e8f4 하나(띠 없음), 표·패널만 #f5f7fc로 한 단계 밝게, 강조 #22673a는 선택 행·탭·버튼·상승 표기에만. 모노 없음 — 숫자는 `tabular-nums`. 타입: 본문 16px / 표 13·19px / 낙찰가 26→36px / 선택 로트 36→52px / h1 22→28px(작게) / h2 26→36px.
예산(tokens §5 기본선)과 실측(2026-10-06, Chromium 1440):
- JS 150KB → 인라인 약 7KB.
- 첫 화면 이미지 0, 사진 4장 lazy. LCP 364ms(요소 `.board-lead`), CLS 0.024(1440)·0.012(390). E2E 기준(LCP ≤3.5s, CLS ≤0.1, 동일 출처 ≤2MB) 통과.
- 폰트 100KB → **초과: 약 480KB**(Noto Sans KR 가변 서브셋 18조각 ≈ 330KB + Gasoek One 10조각 ≈ 150KB, Google Fonts 유니코드 범위 슬라이스). 한글 두 패밀리를 배정받았고 본문 글자 범위가 넓어 슬라이스 수가 늘었다. `display=swap`. Gasoek One을 `text=` 파라미터로 줄이면 15KB 안팎이 되지만 표제 글자를 바꿀 때마다 목록을 맞춰야 해 쓰지 않았다(바꾸려면 "하지 않기로 한 것" 참조).
## 이펙트와 폴백
- 낙찰가 카운터: 마크업에 최종값이 있고 스크립트가 `data-from`(전일가)에서 `data-to`로 600ms 동안 100원 단위로 센다. `prefers-reduced-motion: reduce`면 아무것도 하지 않는다(실측: 로드 직후 최종값). 일자별 탭은 처음 열릴 때 한 번 센다. 열 폭을 9.5rem으로 고정해 세는 동안 레이아웃이 흔들리지 않는다.
- 탭: JS 없으면 품목별 패널만 보인다(일자별은 `hidden`). 인쇄에서는 둘 다 펼친다.
- 가로 넘침 표(제철 달력, 좁은 폭의 시세표)만 JS가 `tabindex=0`·`role=region`을 붙인다. 넘치지 않는 폭에서는 탭 정지점이 생기지 않는다.
- 재질·필터·3D 없음.
## 하지 않기로 한 것
- 전면 배경 사진(새벽 통로)을 히어로에서 뺐다 — 표가 주인이다. 사진은 2절 왼쪽 흘림으로 옮겼다.
- 상단 바 내비·sticky·backdrop-filter를 없앴다. 섹션 4개짜리 한 장이고, 내비 역할은 탭이 맡는다.
- 어두운 띠 교대·`--band-*` 토큰 재정의를 없앴다.
- IBM Plex Mono와 Pretendard를 내렸다. 모노는 한글 라벨을 흩뜨렸다.
- 가운뎃점 메타 문자열을 가시 텍스트에서 전부 없앴다(머리줄, 등급·당도, 선택 상자 옵션, 제철 상태, 영업시간). `#seasonCount`는 "N품목: 사과, 배"가 됐다 — E2E 정규식 수정 필요(검증 절).
- 7일 가격 그래프(카드 C)는 없는 데이터라 만들지 않았다.
- 좁은 폭에서 시세표를 카드로 바꾸지 않았다. 비교 표이므로 열 우선순위(산지·당도·규격 숨김, 320px 이하 등급도 숨김)로 줄이고 선택 로트에서 보여 준다.
- 주소·전화·메일을 지어 넣지 않았다(placeholder).
## 검증
- 검증 줄: html-validate 0 오류 · stylelint 0 · no-hanja PASS(3파일) · showcase-audit PASS 6/6(320~2560) · design-gate 충족 13 / 미검증 0 / 실패 0(꺼짐 3: static·visual·webkit) · recent-showcases-e2e 새벽청과 블록 PASS 10/11(FAIL 1 = `#seasonCount` 가운뎃점 정규식, 예정된 깨짐) · axe 위반 0 · 키보드: Tab 순서 skip → 상호 → 탭(정지점 1) → 행 6 → 달 버튼 → 폼 → 복사, ArrowRight/Home이 탭을 옮기고 패널을 바꾼다(실측).
- 대비(실측 계산): 바탕 위 ink 14.1 · muted 6.96 · faint 4.80 · accent 5.59 / 표면 위 accent 6.38 · faint 5.49 / 선택 행 위 accent 5.25 · faint 4.52 / 흰 글자 on accent 6.84. 어두운 배경·그라디언트 위 텍스트 없음.
- 시각 루브릭(약한 축부터, 캡처 `outputs` 밖 스크래치 `sbc/shots/1440-*.png`, `390-*.png`):
- R6 이미지 1 — 역할은 적혀 있고 크롭에서 주피사체가 남지만(포도 5:4 크롭은 송이 중앙 유지), 통로(야간)와 입고 사진(주간 스튜디오)의 조도가 한 세계로 읽히지 않는다.
- R7 카피 1 — h1 "오늘 새벽 경매 낙찰가"는 다른 청과 도매에도 성립하는 문장이다(표제를 작게 두라는 배정이라 사실은 표가 말한다). 섹션 제목은 사실 문장(전날 21:00, 나주 배·영동 포도). 번역체·은유·가운뎃점 라벨 없음, 합니다체 통일.
- R8 구분성 1 — 반사실 통과, 고유 요소 셋. 같은 세션의 도구형 둘과 구도 패밀리가 같고 eyebrow·캡션 "없음"을 같음으로 세면 B-1 3/5다. B-2는 1/6.
- R9 마감 1 — 200% 확대 검사는 하지 않았다(미검증). 1440 캡처에서 숫자 열 정렬·radius 4px 통일은 확인.
- R1 첫인상 2 — 1440·390 첫 화면만 보고 "청과 도매상의 오늘 새벽 경매 낙찰가 6품목"이 읽힌다. 반례: 리드를 안 읽으면 낙찰가를 판매가로 오해할 수 있다.
- R2 위계 2 — 흐림 사본 시선 1 낙찰가 열 → 2 선택 로트 38,000원 → 3 표제·탭, 의도와 같다. 크기(36/52 vs 16)·굵기·색 세 가지로 구분. 반례: 표의 38,000과 로트의 38,000원이 같은 값이라 둘째 시선이 중복이다.
- R3 묶음 2 — 시작선 160(제목·표·탭)·176(표 셀 패딩)·776(흘림 본문) 셋. 섹션 간격 space-8 > 묶음 안 space-3. 반례: 선택 로트 dl 칸(468·636·805)이 표 열과 맞지 않는다.
- R4 타이포 2 — 합성 볼드·이탤릭 없음(Gasoek One 단일 웨이트, `font-synthesis-style: none`), 자간 0, h1 1줄, 모노 없음. 반례: Gasoek One 콤마가 굵어 "38,000"이 빽빽하다.
- R5 리듬 2 — 시세표 아래 여백 space-7 뒤에 흘림 사진이 여백 0으로 붙는 극단, 52px 숫자 vs 13px 라벨. 반례: 390에서는 섹션 간격이 모두 space-8로 같아 보인다.
- R10 모바일 2 — 390 첫 화면에 상호·표제·시세표 6행·탭이 보인다. 데스크톱 축소가 아니라 열을 줄이고 선택 로트가 숨긴 열을 받는다.
- 합계 17/20, 0점 없음, R1 2점 — 통과선 충족.
- 미검증: 200% 확대 마감 검사, WebKit 렌더, 실기기 INP, 폰트 예산(초과를 명시했다).
## 피드백 기록 · 보존 목록
- 2026-10-02 사용자: 명사 수수께끼 표제·은유·잠언 금지, 시세·낙찰가·입고·납품 같은 업종 어휘로 쓴다 → 유지.
- 보존: 데이터 값·진실 라벨("예시 낙찰가", "안내용 계산"), E2E가 보는 id·data 속성.
## 변경 기록
- 2026-09-12 화면 보정: 사진 위 반투명 표를 불투명 종이 표면으로 분리, tabular 숫자 우측 정렬.
- 2026-10-02 카피: "오늘 새벽 두 시의 값" → "오늘 새벽 경매 시세", 은유·대구를 정보 문장으로. 레드팀 06: 히어로 사진 불투명도 0.85, 한글 라벨을 모노에서 본문 서체로.
- 2026-10-06 재작업(이 문서): 전면 사진 히어로·상단 바·띠 7개 교대를 시세표 첫 화면·탭·단일 바탕으로 바꿨다. Gasoek One / Noto Sans KR, #e4e8f4, 140° 녹, radius 4px, 낙찰가 카운터, 흘림 사진, 연락처 카드 푸터. 페이지 높이 8,517 → 6,370px(1440). 가운뎃점 메타 문자열 0, eyebrow 0.