designpaca/apps/site/public/work/saebyeok-cheonggwa/styles/tokens.css
Yun Chan 4d813420dc
Some checks failed
ci / build (push) Failing after 1m52s
feat(showcase): 신규 쇼케이스 3종 — RFS · 트웬티온스 · 새벽청과
각 워크를 서로 다른 클라이언트로 보고 0~6단계를 따로 돌았다(토큰 체계 신규 정의 =
전체 경로). 셋 모두 라이트/다크 반전을 .band-light / .band-dark 가 --band-* 를
재정의하는 규칙으로 정의해 하드 게이트 4를 통과시켰다 — 반전이 섹션마다의 기분이
아니라 두 클래스가 만드는 규칙이다.

RFS — 실시간 유체 시뮬레이터 (rfs-cfd)
  프리셋 darkroom-spec · 컨셉 "암실과 사양서"
  R1 luminary.ai · R2 teenage.engineering EP-133 · 보조 simscale.com (전부 실측)
  히어로에서 브라우저가 실제로 Navier–Stokes 를 푼다. 순수 WebGL2, three.js 미사용.
  이류 → 온도 소스 → 부력·설비 힘 → 발산 → 압력 Jacobi → 투영 → 파티클 전진.
  격자 224×126 / 파티클 26,000 / Jacobi 22회, 좁은 화면은 절반으로 줄인다.
  prefers-reduced-motion 이면 시작하지 않고 그 자리에 RFS 실물 파티클 렌더가 남는다.
  단위계로 세 번 실패했다: dt 를 프레임 단위로 넘겨 파티클이 0.2초 만에 소멸했고,
  전부 급기구에서만 재생성해 실 한 가닥이 됐으며, 랙이 위로 뿜어 핫/콜드 아일이
  갈라지지 않았다. dt 를 초로 못박고 속도를 초당 격자 셀로 통일해 해결했다.
  수치는 전부 RFS 저장소 README 출처. 정확도 지표는 싣지 않았다 — 사내 검증 자료이고
  현재 통과 상태가 아니다.

트웬티온스 (twentyoz-corp)
  프리셋 field-record · 컨셉 "네 개의 현장"
  R1 samsara.com · R2 lars-mueller-publishers.com · R3 = 현행 twentyoz.kr 감사
  현행 사이트 실측: 대비 실패 172개 요소(9~11px 가 3.61:1), 한글 폰트 미지정으로
  한글이 시스템 기본으로 떨어짐, h1 자간 −0.06em(한글 상한의 세 배), 배경 #020202.
  'Digital Genetics' 은유가 산업용 IoT 사업을 가리고 있었다.
  유지한 자산은 radius 0 과 무채색·모노 기조.
  첫 화면에 회사 이름 대신 현장 선택기를 뒀다 — 라디오 그룹이라 JS 0바이트이고
  좌우 화살표 키가 그냥 먹는다. 파트너 19곳은 원본에 도메인 표기가 없어 나누지 않았다.

새벽청과 (saebyeok-cheonggwa)
  프리셋 market-board · 컨셉 "오늘 새벽 두 시의 값"
  R1 natoora.com · R2 phillips.com · R3 제철 12개월 띠
  커머스가 감추는 시세 변동을 히어로의 주인공으로 삼았다. 상품 사진은 아래로 내렸다.
  경매 시각·경락가격·등급·당도 표시 규정을 조사해 카피의 근거로 썼다.
  무화과 당도를 "—" 로 두고 값이 없는 게 아니라 표시가 허용되지 않는 품목이라고 적었다.
  등락은 색이 아니라 ▲▼보합 기호가 먼저다.
  표의 숫자가 예시임을 판 아래와 푸터 두 곳에 명시하고, 주소·전화는 비웠다(게이트 11).
  사진 4장은 codex 내장 image_gen 생성물이며 합계 341KB.

검증: Astro 빌드 통과, verify 체인 L0~L6 10계층 전부 통과,
showcase-audit 신규 3종 12/12 통과(320/390/768/1440).
성능 실측(RFS): JS 24KB · 총 704KB. 폰트만 530KB 로 예산(200KB) 초과 —
한글 웹폰트 자체가 원인이고 기존 cheongon-care 는 650KB 로 더 크다.
저장소 공통 baseline 이라 이번 판은 기록만 남기고 넘어간다.

기존 16종에서 발견된 70건(대비 미달·히어로 줄 수 초과)은 이번 범위를 넘어
design.md 에 목록만 남겼다.
2026-08-24 12:51:48 +09:00

128 lines
6.5 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* ==========================================================================
새벽청과 (曉靑果) — 청과 도매 직거래 · 디자인 토큰 SSOT
컨셉 : 오늘 새벽 두 시의 값 — 값이 매일 바뀐다는 사실을 숨기지 않고
첫 화면의 주인공으로 삼는다
프리셋: market-board (신규 정의. quiet-commerce 를 뼈대로 삼되 상품이 아니라
'오늘의 값'이 히어로다)
강조색: 새벽 남색 1색. 라이트/다크는 규칙으로 정의된 한 쌍이므로 1종으로 센다
── 왜 화면이 무채색인가
과일이 색을 전부 쓴다. 사진 안에 빨강·자주·황금이 이미 다 들어 있는데
UI 까지 색을 쓰면 둘이 싸운다. 그래서 판은 종이와 잉크로만 짓고,
유채색은 사진과 강조색 하나에만 허락한다.
── 강조색의 근거
이 시장은 새벽 두 시에 연다. 낮의 색이 아니라 해뜨기 전의 색이어야 하고,
과일의 난색(적·황·자)과 보색 관계라 사진을 죽이지 않는다.
저장소의 기존 16종에 남색 계열이 비어 있는 것도 확인했다.
── 레퍼런스 실측 (2026-08-24, 1440px computed style)
R1 구조 · natoora.com (제철 농산물 직거래 — 같은 업종)
텍스트 #121212 · Helvetica Now Text 사실상 1패밀리
본문 16px(224회) · 시각 헤드라인 72px(6회) → 최대÷본문 4.5배
radius 0px 975회 지배 · 강조색 #3860BE 가 단 1회
컨테이너 1313 ↔ 1425 전폭 · 칼럼 427
히어로 이미지 1313×900 이 첫 화면 대부분, 같은 크기가 세로로 반복
→ 가져온 원리: **품목마다 어디서 누가 길렀는지를 문장으로 붙인다.**
제철 커머스의 설득은 사진이 아니라 출처의 구체성이다
→ 안 가져온 것: h1 이 16px 이고 시각 헤드라인(72px)과 분리돼 있다
(스크린리더가 읽는 제목과 눈에 보이는 제목이 다르다 — 접근성 실패).
전체 대문자 내비도 가져오지 않는다
R2 톤 · phillips.com (미술품 경매 하우스 — 다른 업종)
텍스트 순흑 #000000(141회) · 보조 #757777 · 강조색 사실상 없음
h1 28px/400 — 아주 작다 · 본문 14px(100회) · 최대÷본문 1.7배
radius 0px 685회 지배 · 컨테이너 1425 ↔ 1329 ↔ 443
→ 가져온 원리: **경매는 날짜와 상태가 제목보다 앞에 선다.**
무엇이 언제 열리고 지금 어느 단계인지가 먼저 나오고, 화면은 무채색으로
물러나 출품작이 색을 갖게 한다
→ 안 가져온 것: 본문 14px(한글 하한 16px 위반), 최대÷본문 1.7배(평평한 스케일),
폰트 3패밀리
R3 디테일 · 제철 12개월 띠
품목이 언제 나오는지를 12칸 격자 한 줄로 보여준다. natoora 의 'IN SEASON NOW'
를 문구가 아니라 구조로 승격한 것이다. CSS 그리드로 짓고, 이번 달 표시에만
인라인 스크립트를 쓴다(달이 바뀌면 저절로 따라가야 하므로)
── 사실 근거 (카피에 쓰는 용어는 전부 아래에서 왔다)
· 가락시장 과일 경매는 새벽 2시~아침 8시. 포도·복숭아·감귤·자두·딸기·멜론·참외·
토마토·수박·단감은 하절기 02:00 / 동절기 02:30, 사과·배·유자·떫은감·수입과실은 08:30
— garak.co.kr 시장경매시간안내
· 유통 경로: 출하자 → 도매법인(경매회사) 수집 → 경매 → 중도매인 낙찰 → 소매 → 소비자
· 경락가격 = 낙찰가격. 농산물유통정보(KAMIS)가 가락시장 경락가격을 공개한다
· 등급은 특·상·보통. **당도 표시는 특·상 등급에만 허용**된다
· 당도 표시 가능 품목은 사과·배·복숭아·포도·감귤·금감·단감·자두 8품목과
수박·조롱수박·참외·멜론·딸기 5품목 — 농산물 표준규격
· Brix = 용액 100g 에 든 당의 g 수
· 선과기는 드럼식(지름 기준)과 중량식(무게 기준)
· 거래단위 예: 사과 2·5·7.5·10kg, 포도 2·3·4·5kg
========================================================================== */
:root {
/* ── 타이포그래피 — 5단계 + 스케일 밖 디스플레이 1개 ── */
--step--1: 0.8125rem; /* 13px — 표 머리·단위·메타 */
--step-0: 1rem; /* 16px — 본문 (한글 하한) */
--step-1: 1.1875rem; /* 19px — 리드 */
--step-2: clamp(1.375rem, 1.15rem + 1.1vw, 1.9375rem); /* 22 → 31px */
--step-3: clamp(1.75rem, 1.3rem + 2.3vw, 2.75rem); /* 28 → 44px */
--display: clamp(2.375rem, 1.5rem + 4.3vw, 4.5rem); /* 38 → 72px */
/* 최대 ÷ 본문 = 72 ÷ 16 = 4.5배. R1(natoora) 과 같은 비율이다 */
--leading-tight: 1.18;
--leading-normal: 1.7;
--leading-loose: 1.85;
--measure: 33em;
--font-body: Pretendard, "Pretendard Variable", -apple-system, system-ui, sans-serif;
--font-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, monospace;
/* ── 색 · 종이(라이트) ── */
--surface: #fbfaf7;
--surface-2: #f2f0ea;
--surface-3: #e7e4dc;
--line: #ddd9d0;
--line-strong: #b8b3a8;
--ink: #16181a; /* 17.2:1 */
--ink-muted: #55595d; /* 6.87:1 */
--ink-faint: #696e73; /* 4.96:1 */
--accent: #1f3f6b; /* 10.08:1 · 흰 글자 얹으면 10.5:1 */
--accent-hover: #142b4b;
--accent-ink: #ffffff;
--accent-wash: #e6ebf2;
/* ── 색 · 새벽(다크 반전 밴드) — 위 값들의 규칙적 반전 ── */
--dark-surface: #16181a;
--dark-surface-2: #1d2023;
--dark-surface-3: #24282c;
--dark-line: #2f3438;
--dark-line-strong: #454b50;
--dark-ink: #f3f1ec; /* 15.9:1 */
--dark-ink-muted: #a6a9ac; /* 7.63:1 */
--dark-ink-faint: #878b8f; /* 5.22:1 */
--dark-accent: #7fa8d9; /* 7.31:1 — 남색은 어두운 바탕에서 안 보이므로 밝은 쪽 쌍 */
--dark-accent-hover: #9dbfe6;
--dark-accent-ink: #0b1520;
--dark-accent-wash: #1b2c3f;
/* ── 형태 — R1·R2 둘 다 radius 0 이 지배한다(975회 / 685회) ── */
--radius: 0;
/* ── 간격 — 저장소 SSOT 표준 ── */
--space-1: 0.25rem;
--space-2: 0.5rem;
--space-3: 1rem;
--space-4: 1.5rem;
--space-5: 2.5rem;
--space-6: 4rem;
--space-7: 6rem;
--space-8: clamp(4.5rem, 3rem + 6vw, 9rem);
--container: 1120px;
--pad-inline: clamp(1.25rem, 1rem + 2.5vw, 4rem);
/* ── 모션 ── */
--dur-quick: 150ms;
--dur-normal: 380ms;
--ease: cubic-bezier(0.2, 0, 0, 1);
}