NARU / DESIGN
종이배
나루의 디자인 언어예요. 로고의 픽셀 종이배에서 출발했어요. 먹색 선, 종이 바탕, 깃발 파랑. 각진 모서리에 흐림 없는 그림자, 그리고 주소·숫자·아이디처럼 기계가 읽는 글자는 고정폭 글꼴로 써요.
원칙
- 01
선은 먹, 면은 종이
테두리는 2px 먹색 하나. 흐린 그림자, 둥근 모서리, 카드 속 카드는 쓰지 않아요. 가는 1px 선은 목록을 나눌 때만.
- 02
색은 깃발 하나
파랑은 누르거나 고를 수 있는 것에만 써요. 노랑은 형광펜처럼 화면에 하나, 템플릿 표시나 강조에.
- 03
주인공은 사용자 사이트
나루의 화면은 조용히 물러서고, 사용자들의 알록달록한 홈페이지가 가장 먼저 보이게 해요.
색
모든 색은 globals.css의 토큰이에요. 컴포넌트에 gray-600, green-100 같은 날색을 직접 쓰지 말고 토큰을 쓰세요. 밝은 테마와 어두운 테마는 같은 이름에 다른 값이 들어 있어요.
| 토큰 | 밝게 | 어둡게 | 쓰는 곳 |
|---|---|---|---|
ground --background · bg-background | … | … | 페이지 바탕 |
surface --card · bg-card | … | … | 카드, 내비게이션, 바닥글 |
ink --foreground · text-foreground | … | … | 본문 글자 |
ink-2 --muted-foreground · text-muted-foreground | … | … | 설명, 메타 정보 |
line --line · border-line | … | … | 2px 테두리, 단단한 구분선 |
hairline --border · border-border | … | … | 1px 목록 구분선 |
flag --primary · bg-primary | … | … | 주 버튼, 선택 표시, 그래프 |
flag text --link · text-link | … | … | 바탕 위 링크 글자 |
wash --accent · bg-accent | … | … | 가리킨 항목, 옅은 강조 면 |
sun --sun · bg-sun | … | … | 형광펜: 템플릿, 제목 밑줄 |
danger --destructive · text-destructive | … | … | 삭제, 오류 |
success --success · text-success | … | … | 완료, 해결됨 |
warning --warning · text-warning | … | … | 주의, 만료 예정 |
상태 색은 글자로 쓰거나 bg-success/10 처럼 옅게 깔아 써요. 깃발 위 글자는 text-primary-foreground, 바탕 위 링크는 대비가 더 높은 text-link예요.
글꼴
IBM Plex Sans KR과 IBM Plex Mono. 한 가족이라 섞어 써도 획이 맞아요. 고정폭은 주소, 숫자, 아이디, 코드처럼 라틴 글자로 된 기계의 말에만 써요. 한글은 낱말이든 단추든 늘 Sans로.
본문은 word-break: keep-all로 낱말 사이에서만 줄을 바꿔요. 숫자는 tabular-nums로 자릿수를 맞춰요.
모양
각진 모서리
--radius는 0. rounded-full은 점과 아바타에만.
rounded-none누르는 면
흐림 없는 먹색 그림자. 가리키면 떠오르고, 누르면 들어가요.
.press · shadow-hard픽셀 물결
나루터의 물. 큰 구획 사이에 한 줄만.
<PixelWave />브라우저 틀
사용자 사이트는 늘 주소줄과 함께 보여 줘요. 스크린샷이 아직 없으면 muted 면이 자리를 지켜요. <BrowserFrame />
형광펜
화면에서 가장 중요한 낱말 하나에만 sun 밑줄을 그어요.
당신의 공간
구성 요소
src/components/ui의 실제 컴포넌트예요. 왼쪽은 밝은 테마, 오른쪽은 어두운 테마.
버튼
ui/button.tsx태그
ui/badge.tsx · board/KindBadge.tsx입력
ui/input · textarea · select · checkbox · radio-group카드
ui/card.tsx탭
ui/tabs.tsx · 페이지 이동 탭은 tabLinkClass()대화상자와 확인
ui/dialog.tsx · ui/confirm.tsx (useConfirm)window.confirm() 대신 await confirm({ title, destructive })
window.confirm() 대신 await confirm({ title, destructive })
오른쪽 클릭 메뉴
ui/context-menu.tsx쓰는 법
이렇게
- 테두리는 border-2 border-line, 목록 구분은 border-border
- 누를 수 있는 채운 버튼에만 .press 그림자
- 링크인 카드는 .lift, 제목 링크에 after:absolute after:inset-0
- 주소·숫자·아이디·코드는 font-mono, 한글은 늘 Sans
- 빈 목록에는 안내 문장과 첫 행동 링크
- 버튼·입력·선택·탭·대화상자는 늘 components/ui에서
- 지우기 전 확인은 useConfirm(), destructive: true
- 새 색이 필요하면 globals.css에 토큰부터, 그다음 이 페이지에
이렇게 말고
- shadow-lg 같은 흐린 그림자, rounded-lg 같은 둥근 모서리
- 카드 안에 또 카드, 회색 머리띠를 두른 카드 머리
- text-gray-600, bg-green-100 같은 날색
- 한글을 고정폭 글꼴로 (띄어쓰기가 벌어져요)
- 아이콘 대신 이모지
- <button>, <select>, window.confirm()을 직접 쓰기
- 한 화면에 sun 강조 여러 개
고칠 곳을 찾았다면 게시판에 알려 주세요.