# Prism Design System — Brand (Layer 0) | 버전 | 수정일 | 수정자 | 주요 변경 내용 | 비고 | | :--- | :--- | :--- | :--- | :--- | | v0.1.0 | 2026-07-28 | 조선두 | 신규 작성 — 브랜드 슬롯 스키마, 가치축, 팔레트·서체 슬롯, 보이스·문안 규정, 아이코노그래피, SAMAN 인스턴스 실체화 | 최초 버전 | | v0.1.1 | 2026-07-29 | HMCM | BV-2 판정 표기 명확화(조건부 PASS), §8.5 orange/white 페어 등록(LARGE_ONLY 4.01) | 진단 G5·G7 보정 | | 메타 | 값 | | :--- | :--- | | 파일 | `design.brand.md` | | 계층 | **Layer 0 — Brand DNA** | | 역할 | 브랜드 교체 슬롯 정의 · 브랜드 인스턴스 등록부 | | 상위 | `Design.md` (진입점) | | 하위 참조 | `design.foundations.md` (Layer 1) — 본 파일이 공급한 슬롯 값을 소비 | | 로드 정책 | **항상 로드** (코어 + tokens.json과 함께) | > **시스템명**: `Prism` — 아키텍처 은유(단일 광원 → 프리즘 → 분광 → 스펙트럼)에서 도출. 토큰 접두사는 `prism`이다. **2026-07-28 확정.** --- ## 목차 - [1. 브랜드 슬롯 스키마](#1-브랜드-슬롯-스키마) - [2. 가치축 (Value Axis)](#2-가치축-value-axis) - [3. 팔레트 원색 슬롯](#3-팔레트-원색-슬롯) - [4. 타이포그래피 슬롯](#4-타이포그래피-슬롯) - [5. 보이스 & 문안 규정](#5-보이스--문안-규정) - [6. 아이코노그래피](#6-아이코노그래피) - [7. 로고·마크 규약](#7-로고마크-규약) - [8. 브랜드 인스턴스 #1 — SAMAN](#8-브랜드-인스턴스-1--saman) - [9. 인스턴스 추가 절차](#9-인스턴스-추가-절차) --- # 1. 브랜드 슬롯 스키마 ## 1.1 Layer 0의 경계 Layer 0은 **매체가 바뀌어도 변하지 않고, 브랜드가 바뀌면 전부 바뀌는 것**만 담는다. | Layer 0에 속한다 | Layer 0에 속하지 않는다 | | :--- | :--- | | 철학·미션 문장 | 캔버스 치수 (→ Layer 2) | | 가치축과 그 디자인 역할 | 그리드 컬럼 수 (→ Layer 2) | | 팔레트 원색 HEX | 색의 의미역할 매핑 (→ Layer 1) | | 서체 패밀리·웨이트 | 타입 스케일 수치 (→ Layer 1·2) | | 보이스·문안 규칙 | 컴포넌트 기하 (→ Layer 1·2) | | 아이콘 조형 원칙 | 아이콘 픽셀 크기 (→ Layer 2) | | 로고 파일·변형 규칙 | 로고 배치 좌표 (→ Layer 3) | **판별 질문**: *"이 값을 바꾸면 브랜드가 달라 보이는가, 아니면 출력 매체만 달라 보이는가?"* — 전자면 Layer 0이다. ## 1.2 슬롯 정의 브랜드 인스턴스는 아래 슬롯을 **전부** 채워야 한다. 미충족 슬롯이 있으면 인스턴스로 등록할 수 없다. | # | 슬롯 ID | 필수 | 자료형 | 설명 | | :-: | :--- | :-: | :--- | :--- | | B1 | `brand.id` | ★ | slug | 기계 식별자. 토큰 네임스페이스에 사용 | | B2 | `brand.name` | ★ | string | 표기명 (국문/영문 병기 가능) | | B3 | `brand.philosophy` | ★ | string | 철학 슬로건 1문장 | | B4 | `brand.philosophy.operational` | ★ | object | 슬로건의 **조작적 정의** — 최소 2개 축, 각 축은 검증 가능해야 함 | | B5 | `brand.mission` | ○ | string | 미션 1문장 | | B6 | `brand.axes[]` | ★ | array | **가치축** 2~4개. §2 스키마 준수 | | B7 | `brand.palette.primary[]` | ★ | array | 원색. 축 수와 1:1 대응 | | B8 | `brand.palette.neutral[]` | ★ | array | 중립색. 최소 3개 (light bg / dark bg / subtle) | | B9 | `brand.type.family` | ★ | object | 서체 패밀리 + 폴백 스택 | | B10 | `brand.type.weights` | ★ | object | 웨이트 3단 (regular/medium/bold) | | B11 | `brand.voice` | ★ | object | 보이스 4속성. §5.1 스키마 준수 | | B12 | `brand.copy.rules` | ★ | object | 문안 규칙. §5.2~5.7 | | B13 | `brand.icon` | ★ | object | 아이콘 조형 원칙. §6 | | B14 | `brand.logo` | ○ | object | 로고 자산·변형 규칙. §7 | | B15 | `brand.forbidden[]` | ★ | array | 브랜드 차원 절대 금지 목록 | ## 1.3 슬롯 값 검증 규칙 | ID | 규칙 | 판정 방법 | | :--- | :--- | :--- | | **BV-1** | 모든 원색은 **GRADE 값이 산출 가능**해야 한다 (유효 sRGB HEX) | `design.foundations.md §2.1` 산출식 적용 | | **BV-2** | `palette.primary` 중 **최소 1개**는 light 중립 배경 대비 **ΔG ≥ 70**을 만족해야 한다 (본문색 후보 확보) | GRADE 차 계산 | | **BV-3** | `palette.primary` 중 **최소 1개**는 light 중립 배경 대비 **ΔG ≥ 55**를 만족해야 한다 (제목색 후보 확보) | 동일 | | **BV-4** | light 중립 배경과 dark 중립 배경의 **ΔG ≥ 80** | 동일 | | **BV-5** | 악센트 원색이 ΔG < 55인 경우, **본문 사용 금지 규칙이 `brand.forbidden[]`에 명시**되어야 한다 | 목록 검사 | | **BV-6** | 서체는 **한글 웨이트 3단 이상 + 등폭 숫자(tabular figures)** 를 제공해야 한다 | 폰트 메타 확인 | | **BV-7** | 가치축 수 = 원색 수 (1:1 대응) | 개수 대조 | | **BV-8** | 철학 슬로건은 **조작적 정의(B4)** 없이 등록할 수 없다 | 필드 존재 검사 | > **BV-8의 취지**: "좋은 디자인"류의 검증 불가능한 슬로건이 시스템에 들어오는 것을 구조적으로 차단한다. 슬로건은 반드시 *"무엇을 하면 이 슬로건을 지킨 것인가"* 로 환원되어야 하며, 그 환원 결과가 `Design.md §2`의 PF/PD 규칙이 된다. --- # 2. 가치축 (Value Axis) ## 2.1 개념 가치축은 브랜드가 표방하는 가치를 **디자인 역할로 번역한 단위**다. 각 축은 원색 1개와 결합하며, 그 색이 화면에서 수행할 역할을 규정한다. 축을 두는 이유는 색에 **의미를 고정**하기 위해서다. 의미가 고정되면 "이 강조는 왜 주황인가"라는 질문에 매번 답할 필요가 없어지고, 에이전트도 결정론적으로 색을 선택할 수 있다. ## 2.2 축 스키마 ```yaml axis: id: # 필수 — 예: nature, technology, people label_ko: # 필수 — 예: 자연 label_en: # 필수 — 예: Nature design_role: base|accent|ground|support # 필수 — 아래 §2.3 color_ref: # 필수 — 1:1 대응 usage: # 필수 — 이 색이 실제로 칠해지는 대상 economy: # 선택 — 사용량 상한 (accent는 필수) ``` ## 2.3 `design_role` 정의 (고정 어휘) | 역할 | 의미 | 지면 점유 | 전형적 적용 대상 | | :--- | :--- | :--- | :--- | | **base** | 구조·기반. 안정감을 만든다 | 중 | 제목, 구조선, 헤더 면, 아이콘 | | **ground** | 본문·바탕. 읽히는 것 전부 | 대 | 본문 텍스트, 테두리, 라벨, 헤어라인 | | **accent** | 강조·전환. 시선을 1회 붙잡는다 | **극소** | 포인트 마커, 귀결 커넥터, 단일 강조어 | | **support** | 보조. 위 3역할을 보완 | 소 | 보조 텍스트, 비활성 표기, 배경 틴트 | - `base`와 `ground`는 **각각 정확히 1개** 축에만 배정한다. - `accent`는 **1개 이하**. 악센트가 2개면 악센트가 아니다. - `support`는 0개 이상 가능. ## 2.4 악센트 경제 (Accent Economy) `design_role: accent` 축에는 `economy` 필드가 **필수**이며, 다음 형식을 따른다. ``` "<단위 화면·지면>당 최대 개 국소 강조" ``` 이 값은 Layer 1의 `PD-4` 규칙과 검증기가 직접 소비한다. 매체별 "단위 화면"의 정의는 Layer 2가 공급한다. | 매체 | "단위 화면"의 정의 | | :--- | :--- | | print | A3 1면 (양면 스프레드는 2단위) | | presentation | 슬라이드 1장 | | screen | 1 viewport 내 동시 가시 영역 | --- # 3. 팔레트 원색 슬롯 ## 3.1 색 슬롯 스키마 ```yaml color: id: name: # 색명 (브랜드 고유명 허용) hex: "#RRGGBB" # sRGB. 소문자 금지, 6자리 고정 rgb: [r, g, b] # hex와 반드시 일치 — 검증 대상 grade: # 자동 산출 (design.foundations §2.1) axis_ref: # primary는 필수, neutral은 null role: base|ground|accent|support|bg_light|bg_dark|subtle|on_dark usage: ``` > **[정합 검증 필수]** `hex`와 `rgb`는 반드시 동일 색을 가리켜야 한다. SAMAN 선행 시스템에서 `color.subtle`의 `hex: "#474235"` ↔ `rgb: [211,211,211]` 불일치로 **대비 1.13:1의 판독 불가 텍스트**가 산출될 수 있었다. 본 스키마는 이를 자동 검증 항목으로 승격한다. [출처: 자체 산출 / SAMAN `design.tokens.json`] ## 3.2 GRADE 척도 (요약) GRADE는 **CIE L\* 기반 명도 등급**으로, `GRADE = round(100 − L*)` 이다. 0 = 순백, 100 = 순흑. 두 색의 **GRADE 차(ΔG)** 만으로 대비 충족 여부를 계산기 없이 판정한다. [출처: design.benchmark, T4 (USWDS 매직 넘버) · T5 (Carbon 스텝 매트릭스)] | ΔG | 보장 최소 대비 | 판정 | | :-: | :--- | :--- | | **≥ 40** | ≥ 3.17 : 1 | **대형 텍스트 가능** (18pt+ / 14pt+ Bold) | | **≥ 55** | ≥ 5.37 : 1 | **본문 가능** (AA 4.5:1 여유 충족) | | **≥ 70** | ≥ 9.15 : 1 | **AAA 충족** (7:1 여유 충족) | | < 40 | — | **텍스트 사용 금지** (면·도형으로만) | - 위 값은 **모든 base 등급에 대한 최솟값**이다(worst case = 흰 배경 위). 실측 대비는 항상 이 이상이다. - 산출식·검증표 전문은 `design.foundations.md §2.1~2.2`에 있다. - **ΔG는 보수적 하한**이므로, ΔG 미달이어도 실측이 통과하는 경우가 있다. 그 경우 실측값을 `contrast.pairs`에 명시적으로 등록해야 사용할 수 있다(암묵 허용 금지). ## 3.3 중립색 슬롯 요건 | 슬롯 | 필수 | 요건 | | :--- | :-: | :--- | | `bg_light` | ★ | 라이트 배경. **순백(#FFFFFF) 전면 사용 금지** — 대형 화면 눈부심·인쇄 반사 방지. GRADE 0~10 권장 | | `bg_dark` | ★ | 다크 배경. GRADE 90 이상 권장 | | `subtle` | ★ | 보조 텍스트용. 라이트/다크 각각에 대해 ΔG ≥ 40 이상 확보 | | `on_dark` | ○ | 다크 면 위 텍스트·카드. 미지정 시 `bg_light`를 재사용 | --- # 4. 타이포그래피 슬롯 ## 4.1 서체 슬롯 ```yaml type: family: primary: # 예: Pretendard stack: # CSS font-family 전체 폴백 체인 embed: # 로컬 임베드 파일 (PPTX·PDF 임베딩용) weights: regular: 400 medium: 500 bold: 700 features: tabular_figures: true # 필수 (BV-6) variable: ``` ## 4.2 서체 선정 요건 | ID | 요건 | 근거 | | :--- | :--- | :--- | | **TF-1** | 한글 웨이트 **3단 이상** | 위계를 크기·웨이트 2축으로 만들기 위한 최소 조건 | | **TF-2** | **등폭 숫자(tabular figures)** 제공 | 수량표·치수표 정렬. [출처: design.benchmark, T41] | | **TF-3** | 라틴·숫자 혼용 시 **시각 크기 편차가 과도하지 않을 것** | 한글은 라틴의 cap-height 개념이 없어 동일 pt에서 시각 크기가 다름. 보정 계수는 `design.foundations.md §3.10`에서 정의 [출처: design.benchmark, T44 / 자체 정의] | | **TF-4** | **로컬 임베드 가능** (라이선스·파일 확보) | 오프라인 렌더링, PPTX 폰트 임베드, PDF 아웃라인 | | **TF-5** | 인쇄 시 sans-serif 채택 | GOV.UK의 sans 권고 근거("프린터 드라이버 호환")는 PDF 임베딩 방식에 미적용되나, **한글 본문 조판에서 sans가 소자 크기 대비 판독성이 안정적**이라는 별도 근거로 채택 `[자체 판단]` [출처: design.benchmark, §16 상충-4] | > Layer 0은 **어떤 서체인가**만 정한다. **몇 pt인가**는 Layer 1(비율)과 Layer 2(base 값)가 정한다. --- # 5. 보이스 & 문안 규정 > 본 장은 **브랜드가 자기 이름으로 내보내는 모든 문장**에 적용된다. 시스템 내부 주석·에이전트 로그에는 적용하지 않는다. ## 5.1 보이스 4속성 (스키마) ```yaml voice: stance: # 화자의 자세 — 예: 단정적·원칙적·3인칭 distance: # 독자와의 거리 — 예: 전문가 대 전문가 register: # 문체 격 — 예: 규정문체(평서 종결) restraint: # 절제 규칙 — 예: 과장·감탄·마케팅 어휘 금지 ``` 각 속성은 **금지 예시를 1개 이상 동반**해야 한다. 금지 예시 없는 보이스 규정은 실행 불가능하다. ## 5.2 헤딩 어미 규칙 같은 레벨의 헤딩은 **어미를 통일**한다. 목차를 훑을 때의 스캔성이 이 규칙 하나에 크게 좌우된다. [출처: design.benchmark, T28 (Polaris help-documentation 아카이브)] | 레벨 | 어미 | 예시 | 금지 | | :--- | :--- | :--- | :--- | | **장(章)** | 명사형 | "작성 절차", "책임 소재" | "작성 절차는?" | | **절(節)** | 명사형 또는 `~하기` | "시공상세도 검토하기" | 레벨 내 혼용 | | **작업 단계** | `~한다` (평서 종결) | "승인 도서를 현장에 비치한다" | "~합시다", "~하세요" | | **금지 조항** | `~하지 않는다` / `~를 금지한다` | "미승인 도면으로 시공하지 않는다" | "~하면 안 됩니다" | | **권고 조항** | `~를 권장한다` | "BIM 모델과 병행 검토를 권장한다" | "~하는 게 좋습니다" | **"How to" 상당 표현 금지**: "~하는 방법", "~하는 법"은 헤딩에 쓰지 않는다. 헤딩은 대상을 지시하고, 방법은 본문이 담는다. **제목 제거 검사 (removable test)**: 헤딩을 지워도 본문이 문장으로 성립해야 한다. 본문이 헤딩에 의존해 주어를 생략했다면 잘못된 헤딩이다. [출처: design.benchmark, T36] ## 5.3 문장 구성 규칙 | ID | 규칙 | 근거 | | :--- | :--- | :--- | | **CW-1** | 한 문단은 **5문장 이하** | T35 (GOV.UK) | | **CW-2** | 한 문장은 **40어절 초과 시 분할** — 원 규칙 "25단어"를 한국어 어절 기준으로 재정의 `[자체 정의]` | T35 / M20 | | **CW-3** | **역피라미드** — 결론·판정을 먼저, 근거·경위를 뒤에 | T35 | | **CW-4** | **구정보 → 신정보** 순서. 문장 앞머리에는 독자가 이미 아는 것을 둔다 | T51 (Polaris Readability) | | **CW-5** | **끊긴 서술(choppy writing) 회피** — 짧은 단문 나열로 논리 연결을 독자에게 떠넘기지 않는다 | T51 | | **CW-6** | **각주는 인쇄물에서만** 사용한다. 화면 매체에서는 본문 편입 또는 상호참조로 처리 | T35 (GOV.UK "designed for reference in print") | ## 5.4 조건문 서술 규칙 조건 분기는 **조건을 먼저, 처분을 나중에** 쓴다. 독자가 자기에게 해당하지 않는 조건을 즉시 건너뛸 수 있어야 한다. [출처: design.benchmark, T30] ``` [O] 가설구조물에 해당하는 경우에는, 관계전문가의 확인을 받는다. [X] 관계전문가의 확인을 받는다. 단, 가설구조물에 해당하는 경우에 한한다. ``` - 어순 고정: **`~인 경우에는, ~한다`** - 조건절과 처분절은 **쉼표로 분리**한다. 조건만 있고 처분이 없는 문장을 두지 않는다. ## 5.5 적용 조건 선행 배치 각 항목의 **최상단에 "적용 조건 / 제외 조건" 블록**을 둔다. 독자가 해당 없음을 **빨리 확인하고 이탈**할 수 있어야 한다. [출처: design.benchmark, T31 ("Let readers fail fast")] 제약·전제는 절차 목록 **앞**에 온다. 3단계까지 읽고 나서 "단, 이 경우는 제외"를 만나게 하지 않는다. ## 5.6 동사 판별표 같은 동작에 여러 동사를 섞어 쓰면 독자가 **의미 차이를 추론**하게 된다. 아래 표의 좌열을 기본으로 하고, 우열은 명시된 조건에서만 쓴다. [출처: design.benchmark, T52 (Polaris actionable-language 아카이브의 대조표 형식을 한국어로 이식) / 어휘 선정은 `[자체 정의]`] | 기본 동사 | 대체 동사 | 구분 기준 | | :--- | :--- | :--- | | **설치한다** | 시공한다 | 개별 부재·기기 = 설치 / 공정 전체 = 시공 | | **고정한다** | 부착한다 / 거치한다 | 하중을 전달하면 고정 / 표면 접합만이면 부착 / 임시 얹음이면 거치 | | **확인한다** | 검측한다 / 입회한다 | 육안·서류 대조 = 확인 / 계측 수반 = 검측 / 타 주체 현장 참관 = 입회 | | **검토한다** | 승인한다 | 의견 제시까지 = 검토 / 효력 발생 = 승인 | | **작성한다** | 제작한다 / 작성·제출한다 | 도서·문서 = 작성 / 물리적 산출 = 제작 / 제출 의무 수반 시 병기 | | **반영한다** | 적용한다 / 갱신한다 | 기존 문서에 편입 = 반영 / 신규 대상에 시행 = 적용 / 버전 올림 = 갱신 | | **변경한다** | 수정한다 | 승인 효력에 영향 = 변경 / 오기·표기 정정 = 수정 | | **~한다** (의무) | ~할 수 있다 (재량) | **의무와 재량을 어미로만 구분한다.** "~하여야 한다"는 "~한다"로 통일 | > **어미로 규범력을 표현한다**: `~한다`(의무) / `~할 수 있다`(재량) / `~를 권장한다`(권고) / `~하지 않는다`(금지). 이 4종 외의 어미를 규범 조항에 쓰지 않는다. ## 5.7 방향어 금지 `위의 / 아래의 / 오른쪽 / 왼쪽 / 앞서 / 다음의` 같은 **물리적 위치 지시어**를 참조에 쓰지 않는다. **금지 근거**: 방향어는 ① 레이아웃이 매체마다 달라지면 무효가 되고(A3 2단 → 모바일 1단), ② 화면 낭독 시 무의미하며, ③ **참조 대상에 이름이나 번호가 없다는 신호**다. [출처: design.benchmark, T52] ``` [O] 검토 기한은 3.2절에 따른다. [O] [표 4-1]의 구분에 따른다. [X] 아래 표의 구분에 따른다. [X] 앞서 설명한 절차에 따른다. ``` - 대체 수단: **절 번호 / 표·그림 번호 / 항목명**. 참조할 것에 번호가 없으면 번호를 부여한다. - 인쇄 매체에서는 상호참조에 **면수를 병기**한다: `(→ 3.4절, p.27)` [출처: design.benchmark, M12] ## 5.8 한국어 가독성 지표 `[자체 정의]` 영어권 시스템의 지표(Polaris "7th grade reading level", GOV.UK "reading age 9")는 한국어에 대응 개념이 없다. [출처: design.benchmark, M20 / §18-24] 아래를 대체 지표로 사용한다. | 지표 | 목표 | 산출 | | :--- | :--- | :--- | | 평균 문장 길이 | **25어절 이하** (상한 40) | 어절 수 ÷ 문장 수 | | 문단 길이 | **5문장 이하** | 그대로 | | 피동 표현 비율 | **10% 이하** | `~되다/~어지다` 종결 ÷ 전체 문장 | | 한자어 명사구 연쇄 | **3연속 이하** | "시공상세도면작성기준검토" 류 분해 | | 전문용어 초출 정의율 | **100%** | 용어집 등재 또는 초출 시 괄호 정의 | > 이 지표는 **참고 기준**이며 자동 판정 대상이 아니다. 검수 단계의 육안 점검 항목으로 사용한다. --- # 6. 아이코노그래피 ## 6.1 조형 원칙 슬롯 ```yaml icon: grid: # 아이콘 작도 그리드 (정사각 단위) stroke: # 획 두께 (그리드 단위 기준) linecap: round|butt|square linejoin: round|miter|bevel fill: none|solid color_on_light: color_on_dark: set_policy: bespoke|library # 자체 제작 / 외부 라이브러리 ``` ## 6.2 공통 규칙 (매체 불변) | ID | 규칙 | | :--- | :--- | | **IC-1** | **1개 의미 = 1개 아이콘.** 같은 의미에 두 아이콘을 두지 않는다 | | **IC-2** | **장식용 아이콘 금지.** 의미를 담지 않은 아이콘은 배치하지 않는다 | | **IC-3** | **이모지 금지.** 이모지·아이콘 폰트·서드파티 아이콘 라이브러리를 사용하지 않는다 (`set_policy: bespoke`인 경우) | | **IC-4** | 아이콘은 **인라인 SVG**로 삽입해 토큰 색에 바인딩한다. 래스터는 사진·복잡 일러스트에 한한다 | | **IC-5** | 아이콘은 **색 단독으로 의미를 전달하지 않는다.** 형태가 색과 독립적으로 구분되어야 한다 [출처: design.benchmark, T21·T38] | | **IC-6** | 획 두께는 **판형 확대 시 비례 확대하지 않는다** [출처: design.benchmark, T10 (Spectrum "border width는 스케일되지 않는다")] | ## 6.3 아이콘 거버넌스 (승인 절차) 카탈로그에 없는 아이콘이 필요할 때, **임의로 만들지 않는다.** 1. 필요 아이콘을 **제안**한다 — `이름 + 의미 + 조형 사양(그리드·획·구성 요소)` 2. **승인 대기**. 승인 없이 산출물에 포함하지 않는다 3. 승인 후 카탈로그에 등재하고 `design.components.md §3` 아이콘 절에 반영한다 4. 등재 시 **의미 중복 검사**(IC-1)를 수행한다 > 이 절차는 아이콘 세트가 무통제로 팽창해 의미 체계가 무너지는 것을 막는다. SAMAN 선행 시스템에서 이미 운용 중인 규칙을 승계한다. ## 6.4 허용 글리프 아이콘 세트 외에, 아래 유니코드 글리프만 "기호"로 사용할 수 있다. | 글리프 | 용도 | 조건 | | :--- | :--- | :--- | | `▲` `▼` | 증감 추세 | **반드시 색 + 라벨과 병기** (색맹 대응) | | `●` | 범례 마커 | 차트 범례에 한함 | | `→` | 상호참조 | `(→ 3.4절)` 형식에 한함 | | `★` | 필수 표시 | 검증 체크리스트에 한함 | --- # 7. 로고·마크 규약 ```yaml logo: master: # 원본 (투명 배경, 최대 해상도) on_light: on_dark: # 다크 면용 리컬러 변형 mark_only: # 심볼 단독 min_width: # 매체별 최소 폭 (Layer 2가 실체화) clear_space: # 여백 규칙 (마크 높이 배수로 표기) ``` | ID | 규칙 | | :--- | :--- | | **LG-1** | 로고는 **재작도하지 않는다.** 제공된 자산 파일만 사용한다 | | **LG-2** | 로고 색상을 임의 변경하지 않는다. 다크 면에는 `on_dark` 변형을 사용한다 | | **LG-3** | 로고를 **생성 이미지에 굽지 않는다**(bake). 항상 별도 레이어·컴포넌트로 배치한다 | | **LG-4** | 여백(clear space)은 **마크 높이의 배수**로 규정한다. 절대 치수로 규정하면 판형 변경 시 무효가 된다 | | **LG-5** | 최소 폭 미만으로 축소하지 않는다. 미달 시 `mark_only` 변형으로 대체한다 | --- # 8. 브랜드 인스턴스 #1 — SAMAN > 본 장은 **스키마의 완전 실체화 예시**이자 실제 운용 인스턴스다. 새 브랜드를 추가할 때 이 장을 형식 참조로 삼는다. ## 8.1 식별·철학 | 슬롯 | 값 | | :--- | :--- | | `brand.id` | `saman` | | `brand.name` | SAMAN (삼안) | | `brand.philosophy` | **"처음 보지만 익숙하고, 계속 봐도 새로운 디자인"** — *Familiar at first sight, new every time you look.* | | `brand.mission` | **"기술로 사람과 자연이 함께하는 세상"** — *A world where technology brings people and nature together.* | ### 조작적 정의 (`brand.philosophy.operational`) | 축 | 정의 | 검증 가능 형태 | | :--- | :--- | :--- | | **처음 보지만 익숙한**
(Cognitive Fluency) | 낯선 정보의 인지 저항을 최소화한다. 안정적 비례·정렬선·반복 구조로 **예측 가능성**을 만든다 | → `Design.md §2` **PF 규칙군** (그리드 스냅, 허용 분할, 고정선, 여백률, 토큰 전용) | | **계속 봐도 새로운**
(Aesthetic Durability) | 익숙함이 지루함이 되지 않도록 제어한다. 한 화면에 전부 싣지 않고 **레이어드 디테일**을 남긴다 | → `Design.md §2` **PD 규칙군** (단일 결론 존, 대비 위계, 원/근거리 2층, 악센트 희소) | > 이 조작적 정의가 곧 PF/PD 규칙의 근거다. 슬로건 → 규칙 → 검증의 3단 연결이 끊기지 않아야 한다 (BV-8). ## 8.2 가치축 (3축) | 축 ID | 국문 | 영문 | design_role | 원색 | usage | economy | | :--- | :--- | :--- | :--- | :--- | :--- | :--- | | `nature` | 자연 | Nature | **base** | `green` | 제목·구조선·헤더 면·아이콘·강조 면 | — | | `technology` | 기술 | Technology | **accent** | `orange` | 아이브로 틱·귀결 커넥터·원칙 마커·단일 강조어 | **단위 화면당 최대 2개 국소 강조** | | `people` | 사람 | People | **ground** | `brown` | 본문·부제·헤어라인·라벨·테두리 | — | ## 8.3 팔레트 ### 원색 (primary) | id | name | hex | rgb | **GRADE** | axis | role | | :--- | :--- | :--- | :--- | :-: | :--- | :--- | | `green` | Deep Forest Green | `#1F524B` | 31, 82, 75 | **69** | nature | base | | `orange` | Tech Rust Orange | `#D05C26` | 208, 92, 38 | **47** | technology | accent | | `brown` | Human Earth Brown | `#474235` | 71, 66, 53 | **72** | people | ground | ### 중립색 (neutral) | id | name | hex | rgb | **GRADE** | role | | :--- | :--- | :--- | :--- | :-: | :--- | | `sand` | Sand White | `#F4F3F0` | 244, 243, 240 | **4** | bg_light | | `obsidian` | Obsidian Black | `#111111` | 17, 17, 17 | **95** | bg_dark | | `subtle` | Light Gray | `#D3D3D3` | 211, 211, 211 | **15** | subtle | | `white` | Pure White | `#FFFFFF` | 255, 255, 255 | **0** | on_dark | > **[정정 이력]** SAMAN 선행 시스템 `design.tokens.json`의 `color.subtle`은 `hex: "#474235"` / `rgb: [211,211,211]`로 **불일치** 상태였다(hex 기준 렌더 시 green 면 위 대비 **1.13:1**). 본 인스턴스는 `design.md §6.1` 표기인 **`#D3D3D3`을 정본**으로 확정한다. [출처: 자체 산출 / SAMAN `design.tokens.json` `color.subtle`] ## 8.4 슬롯 검증 결과 (BV-1 ~ BV-8) | ID | 판정 | 근거 | | :--- | :-: | :--- | | BV-1 모든 원색 GRADE 산출 가능 | **PASS** | 7색 전부 산출 완료 (§8.3) | | BV-2 본문색 후보 (ΔG ≥ 70 vs bg_light) | **조건부 PASS** | `brown`(72) − `sand`(4) = **ΔG 68** < 70 → CG-2 실측 등록(9.02:1 AAA)으로 사용 | | BV-3 제목색 후보 (ΔG ≥ 55 vs bg_light) | **PASS** | `green`(69) − `sand`(4) = **ΔG 65** ✓ | | BV-4 bg 명도 격차 (ΔG ≥ 80) | **PASS** | `obsidian`(95) − `sand`(4) = **ΔG 91** ✓ | | BV-5 악센트 ΔG < 55 시 금지 명시 | **PASS** | `orange`(47) − `sand`(4) = ΔG 43 → 본문 금지 규칙 §8.7에 명시 ✓ | | BV-6 서체 요건 | **PASS** | Pretendard — 웨이트 3단 + tabular figures ✓ | | BV-7 축 수 = 원색 수 | **PASS** | 3 = 3 ✓ | | BV-8 조작적 정의 존재 | **PASS** | §8.1 ✓ | > **[CONFLICT DETECTED] BV-2 경계 사례** > `brown` on `sand`는 ΔG 68로 규칙상 임계(70) 미달이나, **실측 대비는 9.02:1로 AAA를 충족**한다(자체 재계산 검증 완료). GRADE는 보수적 하한이므로 §3.2 단서에 따라 **실측값을 `contrast.pairs`에 명시 등록하여 사용**한다. 규칙 자체는 완화하지 않는다. ## 8.5 대비 실측 등록부 (`contrast.pairs`) 전 쌍 프로그램 재계산 검증 완료 (2026-07-28). | 전경 | 배경 | ΔG | **실측** | 판정 | 용도 | | :--- | :--- | :-: | :---: | :--- | :--- | | brown | sand | 68 | **9.02** | AAA | **본문 기본** | | green | sand | 65 | **8.00** | AAA | **제목·구조** | | brown | white | 72 | **10.01** | AAA | 카드 위 본문 | | green | white | 69 | **8.87** | AAA | 카드 위 제목 | | white | green | 69 | **8.87** | AAA | 그린 면 위 텍스트 | | sand | green | 65 | **8.00** | AAA | 그린 면 위 텍스트 | | subtle | green | 54 | **5.93** | AA | 그린 면 위 보조 텍스트 | | white | brown | 72 | **10.01** | AAA | 브라운 면 위 텍스트 | | sand | obsidian | 91 | **17.02** | AAA | 다크 면 위 텍스트 | | orange | obsidian | 48 | **4.71** | AA | 다크 면 위 악센트 | | orange | sand | 43 | **3.61** | **Large only** | 대형 악센트 전용 | | white | orange | 47 | **4.01** | **Large only** | 오렌지 면 위 텍스트 | | orange | white | 47 | **4.01** | **Large only** | 흰 카드 위 대형 악센트 전용 (v0.1.1 등록) | | **green** | **obsidian** | **26** | **2.13** | **✗ FAIL** | **금지** | > **[정정 이력]** SAMAN 선행 시스템은 `green on white`를 **8.93**으로 표기했으나 실측은 **8.87**이다. 본 인스턴스는 8.87로 정정한다. **GRADE 규칙의 독립 검증**: ΔG 규칙(§3.2)만으로 판정하면 `orange on sand`(ΔG 43 → 대형 전용), `white on orange`(ΔG 47 → 대형 전용), `green on obsidian`(ΔG 26 → 텍스트 금지)이 도출된다. 이는 SAMAN이 **수작업 실측으로 세운 가드레일과 완전히 일치**한다. GRADE 척도가 기존 규칙을 손실 없이 재생산함이 확인되었다. ## 8.6 타이포그래피 슬롯 | 슬롯 | 값 | | :--- | :--- | | `family.primary` | **Pretendard** | | `family.stack` | `Pretendard, -apple-system, BlinkMacSystemFont, "Noto Sans KR", "Apple SD Gothic Neo", "Malgun Gothic", sans-serif` | | `family.embed` | `assets/fonts/PretendardVariable.ttf` (가변 폰트, 로컬 임베드) | | `weights` | regular 400 / medium 500 / bold 700 | | `features` | tabular figures ✓ / variable ✓ | **표현 규칙**: 한글에는 대소문자가 없으므로, **캡스 톤은 자간(letter-spacing)으로 만든다.** 헤드라인은 좁히고(음수 자간), 라벨·아이브로는 넓힌다(양수 자간). 구체 수치는 `design.foundations.md §3.6`이 정의한다. ## 8.7 보이스 & 금지 목록 ```yaml voice: stance: 단정적·원칙적·3인칭. 원칙은 원칙으로 못 박는다 distance: 전문가 대 전문가. "여러분"·"우리"로 거리를 좁히지 않는다 register: 규정문체(평서 종결). §5.2 어미 4종만 사용 restraint: 과장·감탄·마케팅 어휘 금지. 확신하되 자랑하지 않는다 ``` **보이스 금지 예시** | 속성 | 금지 예 | 대체 | | :--- | :--- | :--- | | stance | "~인 것 같습니다" | "~이다" / 근거 불충분 시 `[추론]` 표기 | | distance | "우리 모두가 아는 것처럼" | 삭제 | | register | "꼭 확인해 주세요!" | "확인한다" | | restraint | "혁신적인 솔루션" | 기능을 사실로 서술 | ### `brand.forbidden[]` (브랜드 차원 절대 금지) | # | 금지 항목 | 근거 | | :-: | :--- | :--- | | 1 | **오렌지 본문 텍스트** (라이트 배경) | ΔG 43 < 55. 대형 텍스트·면에만 | | 2 | **다크 배경 위 그린 텍스트** | ΔG 26, 실측 2.13:1. 그린은 다크 위에서 면·도형으로만 | | 3 | **순백(#FFFFFF) 전면 배경** | 대형 화면 눈부심·인쇄 반사. 라이트 배경은 항상 `sand` | | 4 | **악센트 3개 이상** (단위 화면당) | 악센트 경제 (§2.4) | | 5 | **이모지** | IC-3 | | 6 | **생성 이미지에 텍스트·로고 굽기** | LG-3 | | 7 | **토큰 외 임의 색·치수 하드코딩** | Layer 1 PF 규칙 | | 8 | **그라디언트 배경** | 플랫 토큰 필만 사용 | | 9 | **방향어 참조** ("아래 표", "앞서") | §5.7 | ## 8.8 아이코노그래피 | 슬롯 | 값 | | :--- | :--- | | `grid` | 64 (정사각) | | `stroke` | 4 | | `linecap` / `linejoin` | round / round | | `fill` | none | | `color_on_light` | `green` | | `color_on_dark` | `white` | | `set_policy` | **bespoke** (자체 제작) | **카탈로그 (현행)** | 분류 | 항목 | | :--- | :--- | | SVG 라인 아이콘 4종 | `view`(보기) · `verify`(검증) · `barrier`(장벽) · `network`(허브) | | BIM 래스터 세트 9종 | `plan` · `design` · `construct` · `complete` · `operate` · `section` · `analysis` · `ground` · `cde` | 신규 아이콘은 §6.3 승인 절차를 따른다. ## 8.9 로고 | 슬롯 | 값 | | :--- | :--- | | `master` | `assets/saman-logo.png` (투명, 1048×340) | | `on_light` | `assets/saman-logo.png` | | `on_dark` | `assets/saman-logo-on-dark.png` (워드마크 sand 리컬러, 다이아몬드 orange 유지) | | `mark_only` | `assets/saman-mark.png` / `saman-mark-on-dark.png` | | `clear_space` | 마크 높이의 **1.0배** 이상 | | `min_width` | Layer 2 매체 프로파일이 실체화 | --- # 9. 인스턴스 추가 절차 ## 9.1 절차 | 단계 | 작업 | 산출 | | :-: | :--- | :--- | | 1 | 철학 슬로건 확보 및 **조작적 정의 도출** (2축 이상) | B3·B4 | | 2 | 가치축 정의 — `design_role` 배정 (base 1 / ground 1 / accent ≤1) | B6 | | 3 | 원색·중립색 지정, **GRADE 자동 산출** | B7·B8 | | 4 | **BV-1 ~ BV-8 검증 실행** — 1건이라도 FAIL이면 3단계로 회귀 | 검증표 | | 5 | 대비 실측 전 쌍 계산 → `contrast.pairs` 등록 | 등록부 | | 6 | ΔG 미달이나 실측 통과 쌍은 **명시 등록** (암묵 허용 금지) | 등록부 | | 7 | 서체 슬롯 지정 (TF-1 ~ TF-5 확인) | B9·B10 | | 8 | 보이스 4속성 + **금지 예시** 작성 | B11 | | 9 | 문안 규칙 — §5.6 동사 판별표를 **해당 도메인 어휘로 재작성** | B12 | | 10 | 아이콘 조형 원칙·초기 카탈로그 확정 | B13 | | 11 | 로고 자산 확보 및 변형 생성 | B14 | | 12 | `brand.forbidden[]` 확정 — **BV-5 유래 항목 필수 포함** | B15 | | 13 | `design.tokens.json`의 `brand` 블록에 반영, **md ↔ json 정합 검증** | 토큰 갱신 | | 14 | 본 파일에 인스턴스 장(章) 추가 → MINOR 버전 증가 | 문서 갱신 | ## 9.2 인스턴스 등록 체크리스트 | # | 항목 | 필수 | | :-: | :--- | :-: | | 1 | 슬롯 B1~B15 전부 충족 | ★ | | 2 | BV-1 ~ BV-8 전부 PASS (경계 사례는 사유 기재) | ★ | | 3 | `hex` ↔ `rgb` 전 색 일치 검증 | ★ | | 4 | 대비 실측 전 쌍 프로그램 계산 (수기 계산 금지) | ★ | | 5 | FAIL 쌍은 `brand.forbidden[]`에 반영 | ★ | | 6 | 보이스 각 속성에 금지 예시 1개 이상 | ★ | | 7 | 동사 판별표가 해당 도메인 어휘로 작성됨 | ★ | | 8 | 아이콘 카탈로그에 의미 중복 없음 (IC-1) | ★ | | 9 | `Design.md §2` PF/PD 규칙과 조작적 정의가 연결됨 | ★ | | 10 | `design.tokens.json` 동기화 완료 | ★ | ## 9.3 브랜드 교체 시 영향 범위 | 계층 | 영향 | 재작업 | | :--- | :--- | :--- | | **Layer 0** | 전면 교체 | 본 파일 인스턴스 장 신규 작성 | | **Layer 1** | **영향 없음** | 없음 — 파운데이션은 색의 *의미역할*만 참조하며 HEX를 직접 참조하지 않는다 | | **Layer 2** | **영향 없음** | 없음 | | **Layer 3** | **영향 없음** | 없음 — 모듈은 토큰명으로만 지시한다 | > 이것이 Layer 분리의 실익이다. 브랜드 교체가 **Layer 0 한 파일로 격리**되려면, 하위 계층에서 `#1F524B` 같은 리터럴이 단 한 번도 등장하지 않아야 한다. [출처: design.benchmark, T33 (GOV.UK "hex 값 직접 복사 금지, 함수로만 참조")] --- ## 근거 출처 요약 본 파일이 인용한 벤치마킹 항목: **T4 · T5 · T10 · T21 · T28 · T30 · T31 · T33 · T35 · T36 · T38 · T41 · T44 · T51 · T52 · M12 · M20 · §16-4 · §18-24** 전문: `RAG/design.benchmark_2026-07-28_v0.1.0.md` `[자체 정의]` 표기 항목: CW-2 어절 기준 · §5.6 동사 판별표 어휘 · §5.8 한국어 가독성 지표 · TF-5 한글 sans 채택 근거