- Code\rebar_pipeline, review_pipeline, pier-program을 정션에서 실제 폴더로 전환 - Code\rhino_mcp 및 CLAUDE_rhino배경.md 추가, .mcp.json은 PYTHONPATH로 새 위치 사용 - pier-program 내부 .git 제거(이력은 backup\pier-program_20261028.bundle에 보관) - worktree 가이드 반영(CLAUDE.local.md, HANDOFF.md) - D:\Rhino-MCP 경로 참조를 새 위치로 치환 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
624 lines
37 KiB
JSON
624 lines
37 KiB
JSON
{
|
|
"_about": "Prism Design System — canonical machine-readable tokens (SSOT). On any conflict with the .md documents, THIS FILE WINS (Design.md §1.4). Agents parse this directly. Human-readable summaries live in design.foundations.md and design.medium.*.md.",
|
|
"_drift_policy": "문서 표의 수치와 본 파일 값의 정합 검증은 빌드 게이트다 (foundations F9 / modules DR-2). 문서에 값을 옮겨 적을 때는 본 파일에서 생성한다 — 손으로 옮기지 않는다.",
|
|
|
|
"meta": {
|
|
"system": "Prism Design System",
|
|
"version": "0.1.1",
|
|
"date": "2026-07-29",
|
|
"file": "design.tokens.json",
|
|
"token_prefix": "prism",
|
|
"namespace_pattern": "prism.{ref|sys|comp}.{category}.{name}[.{modifier}]",
|
|
"layers": {
|
|
"0": "brand — 브랜드 교체 슬롯",
|
|
"1": "foundation — 매체·브랜드 불변, 무단위 상대 정의",
|
|
"2": "medium — 매체별 절대값 바인딩",
|
|
"3": "module — 개별 케이스 (본 파일 밖)"
|
|
},
|
|
"active_brand": "saman",
|
|
"mediums": ["print", "presentation", "screen"]
|
|
},
|
|
|
|
"brand": {
|
|
"saman": {
|
|
"id": "saman",
|
|
"name": "SAMAN (삼안)",
|
|
"philosophy": "처음 보지만 익숙하고, 계속 봐도 새로운 디자인",
|
|
"philosophy_en": "Familiar at first sight, new every time you look.",
|
|
"mission": "기술로 사람과 자연이 함께하는 세상",
|
|
"philosophy_operational": {
|
|
"familiarity": { "definition": "낯선 정보의 인지 저항 최소화. 안정적 비례·정렬선·반복 구조로 예측 가능성을 만든다", "rules": "PF-1~PF-6" },
|
|
"durability": { "definition": "익숙함이 지루함이 되지 않도록 제어. 한 화면에 전부 싣지 않고 레이어드 디테일을 남긴다", "rules": "PD-1~PD-4" }
|
|
},
|
|
"axes": [
|
|
{ "id": "nature", "label_ko": "자연", "label_en": "Nature", "design_role": "base", "color_ref": "green", "usage": "제목·구조선·헤더 면·아이콘·강조 면", "economy": null },
|
|
{ "id": "technology", "label_ko": "기술", "label_en": "Technology", "design_role": "accent", "color_ref": "orange", "usage": "아이브로 틱·귀결 커넥터·원칙 마커·단일 강조어", "economy": "단위 화면당 최대 2개 국소 강조" },
|
|
{ "id": "people", "label_ko": "사람", "label_en": "People", "design_role": "ground", "color_ref": "brown", "usage": "본문·부제·헤어라인·라벨·테두리", "economy": null }
|
|
],
|
|
"type": {
|
|
"family": {
|
|
"primary": "Pretendard",
|
|
"stack": "Pretendard, -apple-system, BlinkMacSystemFont, \"Noto Sans KR\", \"Apple SD Gothic Neo\", \"Malgun Gothic\", sans-serif",
|
|
"embed": "assets/fonts/PretendardVariable.ttf"
|
|
},
|
|
"weights": { "regular": 400, "medium": 500, "bold": 700 },
|
|
"features": { "tabular_figures": true, "variable": true },
|
|
"normalization": { "Pretendard": 1.000, "_note": "폴백 서체 계수는 실측 후 등재 (foundations NF-2). 미등재 서체는 사용 금지 (NF-3)." }
|
|
},
|
|
"voice": {
|
|
"stance": "단정적·원칙적·3인칭. 원칙은 원칙으로 못 박는다",
|
|
"distance": "전문가 대 전문가. '여러분'·'우리'로 거리를 좁히지 않는다",
|
|
"register": "규정문체(평서 종결). 어미 4종만 사용",
|
|
"restraint": "과장·감탄·마케팅 어휘 금지. 확신하되 자랑하지 않는다",
|
|
"endings": { "obligation": "~한다", "discretion": "~할 수 있다", "recommendation": "~를 권장한다", "prohibition": "~하지 않는다" }
|
|
},
|
|
"icon": {
|
|
"grid": 64, "stroke": 4, "linecap": "round", "linejoin": "round", "fill": "none",
|
|
"color_on_light": "green", "color_on_dark": "white", "set_policy": "bespoke",
|
|
"catalog_svg": ["view", "verify", "barrier", "network"],
|
|
"catalog_raster": ["plan", "design", "construct", "complete", "operate", "section", "analysis", "ground", "cde"],
|
|
"governance": "신규 아이콘은 제안 → 승인 대기 → 등재 → 중복 검사. 승인 없이 임의 생성 금지"
|
|
},
|
|
"logo": {
|
|
"master": "assets/saman-logo.png",
|
|
"on_light": "assets/saman-logo.png",
|
|
"on_dark": "assets/saman-logo-on-dark.png",
|
|
"mark_only": "assets/saman-mark.png",
|
|
"clear_space": "마크 높이의 1.0배 이상"
|
|
},
|
|
"forbidden": [
|
|
"오렌지 본문 텍스트 (라이트 배경) — ΔG 43 < 55",
|
|
"다크 배경 위 그린 텍스트 — ΔG 26, 실측 2.13:1",
|
|
"순백(#FFFFFF) 전면 배경",
|
|
"악센트 3개 이상 (단위 화면당)",
|
|
"이모지",
|
|
"생성 이미지에 텍스트·로고 굽기",
|
|
"토큰 외 임의 색·치수 하드코딩",
|
|
"그라디언트 배경",
|
|
"방향어 참조 ('아래 표', '앞서')"
|
|
]
|
|
}
|
|
},
|
|
|
|
"ref": {
|
|
"_note": "Layer 0이 공급한 원시값. 컨텍스트 무관. Layer 2·3에서 직접 참조 금지 (TN-2).",
|
|
"color": {
|
|
"green": { "name": "Deep Forest Green", "hex": "#1F524B", "rgb": [31, 82, 75], "grade": 69, "axis": "nature", "role": "base" },
|
|
"orange": { "name": "Tech Rust Orange", "hex": "#D05C26", "rgb": [208, 92, 38], "grade": 47, "axis": "technology", "role": "accent" },
|
|
"brown": { "name": "Human Earth Brown", "hex": "#474235", "rgb": [71, 66, 53], "grade": 72, "axis": "people", "role": "ground" },
|
|
"sand": { "name": "Sand White", "hex": "#F4F3F0", "rgb": [244, 243, 240], "grade": 4, "axis": null, "role": "bg_light" },
|
|
"obsidian": { "name": "Obsidian Black", "hex": "#111111", "rgb": [17, 17, 17], "grade": 95, "axis": null, "role": "bg_dark" },
|
|
"subtle": { "name": "Light Gray", "hex": "#D3D3D3", "rgb": [211, 211, 211], "grade": 15, "axis": null, "role": "subtle",
|
|
"_correction": "선행 SAMAN tokens.json은 hex '#474235' / rgb [211,211,211] 불일치 상태였음. design.md §6.1 표기인 #D3D3D3을 정본으로 확정." },
|
|
"white": { "name": "Pure White", "hex": "#FFFFFF", "rgb": [255, 255, 255], "grade": 0, "axis": null, "role": "on_dark" }
|
|
},
|
|
"status_color": {
|
|
"do": { "on": "#005A4E", "on_grade": 66, "container": "#DCEAE6", "container_grade": 8, "symbol": "✓", "label": "권장", "dark": { "on": "#DCEAE6", "container": "#005A4E", "measured": 6.59 } },
|
|
"dont": { "on": "#8F2A11", "on_grade": 67, "container": "#F6DFDA", "container_grade": 9, "symbol": "✕", "label": "금지", "dark": { "on": "#F6DFDA", "container": "#8F2A11", "measured": 6.58 } },
|
|
"caution": { "on": "#6B4A00", "on_grade": 66, "container": "#F5E7CC", "container_grade": 8, "symbol": "▲", "label": "주의", "dark": { "on": "#F5E7CC", "container": "#6B4A00", "measured": 6.60 } },
|
|
"tip": { "on": "#0A4E86", "on_grade": 68, "container": "#DDE8F3", "container_grade": 9, "symbol": "▣", "label": "참고", "dark": { "on": "#DDE8F3", "container": "#0A4E86", "measured": 6.91 } },
|
|
"_note": "GRADE를 66~68로 의도적 균일화. 흑백 출력 시 색은 구분되지 않으나 기호로 구분되므로 정보 손실 0 (foundations ST-2). Polaris 원색(적록 축)은 색각이상 취약으로 기각 (M13). 다크 테마는 container↔on 반전 페어를 사용한다 — WCAG 대비는 교환 대칭이므로 실측값 동일 (v0.1.1, TM-S5 해소)."
|
|
},
|
|
"dataviz": {
|
|
"categorical": [
|
|
{ "id": "cat-1", "hex": "#C08A2E", "grade": 39, "name": "Ochre", "order": 1 },
|
|
{ "id": "cat-2", "hex": "#6E8F3C", "grade": 45, "name": "Moss", "order": 2 },
|
|
{ "id": "cat-3", "hex": "#3C6E9F", "grade": 55, "name": "Steel Blue", "order": 3 },
|
|
{ "id": "cat-4", "hex": "#8C3B14", "grade": 64, "name": "Burnt Sienna", "order": 4 },
|
|
{ "id": "cat-5", "hex": "#1B4A43", "grade": 72, "name": "Deep Teal", "order": 5 },
|
|
{ "id": "cat-6", "hex": "#5E4370", "grade": 67, "name": "Plum", "order": "reserve" }
|
|
],
|
|
"max_series": 5,
|
|
"grade_ladder": [39, 45, 55, 64, 72],
|
|
"_note": "면(fill) 전용. 라벨은 sys.text.* 토큰 사용 (DV-2). 계열 3개 이상이면 패턴·직접 라벨 병기 필수 (DV-3). 인쇄 전 CMYK 색역 이탈 검증 필수 (DV-4)."
|
|
}
|
|
},
|
|
|
|
"foundation": {
|
|
"_note": "Layer 1. 절대 치수 없음. 비율·단계·관계만.",
|
|
|
|
"grade": {
|
|
"formula": "GRADE = round(100 - Lstar)",
|
|
"range": [0, 100],
|
|
"anchors": { "white": 0, "black": 100 },
|
|
"magic_numbers": {
|
|
"large_text": { "deltaG": 40, "guaranteed_min_ratio": 3.17, "exact_boundary": 39 },
|
|
"body_text": { "deltaG": 55, "guaranteed_min_ratio": 5.37, "exact_boundary": 51 },
|
|
"aaa": { "deltaG": 70, "guaranteed_min_ratio": 9.15, "exact_boundary": 63 },
|
|
"text_forbidden_below": 40
|
|
},
|
|
"ladder_step_recommended": [10, 15],
|
|
"_note": "보장값은 전 base 등급에 대한 최악값(흰 배경 위). 실측은 항상 이 이상."
|
|
},
|
|
|
|
"typography": {
|
|
"ratio": 1.125,
|
|
"ratio_name": "Major Second",
|
|
"format_transition_ratio": 1.41421356,
|
|
"format_transition_note": "판형 간 전환은 base에 √2를 곱한다 (A4→A3→A2→A1). 스케일 인덱스는 이동하지 않는다.",
|
|
"rounding": { "convention": "half-up", "print": "0.1pt", "presentation": "1px", "screen": "1px",
|
|
"_note": "반올림 후 값이 아니라 생성식이 정본. 파생 시 항상 식에서 재계산한다. half-up 명시는 언어별 기본 반올림(예: Python banker's rounding) 차이로 인한 드리프트를 막기 위함이다." },
|
|
"scale": {
|
|
"caption": { "step": -2, "multiplier": 0.7901, "lineHeight": 1.55, "weight": 500, "tracking": 0 },
|
|
"body-sm": { "step": -1, "multiplier": 0.8889, "lineHeight": 1.70, "weight": 400, "tracking": 0 },
|
|
"body": { "step": 0, "multiplier": 1.0000, "lineHeight": 1.70, "weight": 400, "tracking": 0 },
|
|
"body-lg": { "step": 1, "multiplier": 1.1250, "lineHeight": 1.70, "weight": 400, "tracking": 0 },
|
|
"title-sm": { "step": 2, "multiplier": 1.2656, "lineHeight": 1.50, "weight": 500, "tracking": 0 },
|
|
"title": { "step": 4, "multiplier": 1.6018, "lineHeight": 1.50, "weight": 700, "tracking": 0 },
|
|
"title-lg": { "step": 6, "multiplier": 2.0273, "lineHeight": 1.50, "weight": 700, "tracking": 0 },
|
|
"display": { "step": 9, "multiplier": 2.8865, "lineHeight": 1.25, "weight": 400, "tracking": "conditional" },
|
|
"display-lg": { "step": 12, "multiplier": 4.1099, "lineHeight": 1.25, "weight": 400, "tracking": "conditional" }
|
|
},
|
|
"lineHeight_note": "한글(CJK) 기준. 라틴 대비 body +0.2, heading +0.2 상향 (Spectrum CJK 승수 T9).",
|
|
"tone_modifiers": {
|
|
"label": { "weight": 500, "tracking": "+0.12em" },
|
|
"eyebrow":{ "weight": 500, "tracking": "+0.18em" },
|
|
"metric": { "weight": 700, "tracking": 0, "tabular": true },
|
|
"quiet": { "weight": 400, "tracking": 0, "color": "sys.text.on-subtle" }
|
|
},
|
|
"tracking_rules": {
|
|
"negative_min_size_px_equiv": 60,
|
|
"negative_max": "-0.02em",
|
|
"all_caps_body": "forbidden"
|
|
},
|
|
"measure_em": {
|
|
"single_column": { "min": 22, "max": 38, "ideal": 33 },
|
|
"multi_column": { "min": 20, "max": 25 },
|
|
"extended_max": 45,
|
|
"char_width_coefficient": { "hangul": 1.0, "latin": 0.5 },
|
|
"_note": "글자 수가 아니라 em 단위 행 길이로 정의. 한글 전각/라틴 반각 차이를 흡수한다 (자체 정의, M10)."
|
|
},
|
|
"hierarchy_rules": {
|
|
"min_step_gap_between_heading_levels": 2,
|
|
"max_heading_to_body_ratio": 2.0,
|
|
"truncation": "forbidden"
|
|
}
|
|
},
|
|
|
|
"space": {
|
|
"_naming": "space.{N} where N = baseUnit 대비 백분율",
|
|
"scale": {
|
|
"025": 0.25, "050": 0.5, "100": 1, "150": 1.5,
|
|
"200": 2, "300": 3, "400": 4, "600": 6, "800": 8
|
|
},
|
|
"aliases": {
|
|
"inline-gap": "050", "text-block": "100", "paragraph": "150",
|
|
"card-padding": "200", "block-gap": "300", "zone-gap": "400", "section-gap": "600"
|
|
},
|
|
"alias_depth_max": 1,
|
|
"snap_unit": "050",
|
|
"baseline_rule": {
|
|
"applies_to": ["print"],
|
|
"rule": "body lineHeight (절대값) === space.100",
|
|
"_note": "foundations v0.1.1 — 다단 연속 본문 매체에만 적용. presentation·screen은 space.050 스냅으로 갈음."
|
|
},
|
|
"whitespace_ratio": { "min": 0.40, "max": 0.55, "bottom_empty_max": 0.25 }
|
|
},
|
|
|
|
"radius": { "none": 0, "sm": 0.5, "md": 1, "lg": 1.5, "pill": 9999 },
|
|
|
|
"stroke": { "hairline": 1, "regular": 2, "bold": 3, "icon": 4, "connector": 5 },
|
|
|
|
"grid": {
|
|
"columns_allowed": [12, 8, 6, 4, 3],
|
|
"default_columns": 12,
|
|
"derivation": "2x — 판형·뷰포트가 작아지면 컬럼을 2로 나눈다 (12→6→3 또는 12→8→4)",
|
|
"integrity_formula": "cols * colW + (cols-1) * gutter === contentW",
|
|
"splits_allowed": ["12", "6:6", "8:4", "4:8", "4:4:4", "3:3:6", "3:3:3:3"],
|
|
"aspect_ratios_allowed": ["1:1", "2:1", "3:2", "2:3", "4:3", "16:9"],
|
|
"alignment_scope": "top-level containers only"
|
|
},
|
|
|
|
"surface": {
|
|
"levels_max": 3,
|
|
"adjacent_deltaG_min": 5,
|
|
"elevation_semantic": ["sunken", "default", "raised", "overlay"],
|
|
"_note": "표현 방식은 매체가 정한다 (mediums.*.elevation). 토큰명은 4레벨 모두 동일."
|
|
},
|
|
|
|
"emphasis": {
|
|
"default": 0,
|
|
"emphasis": 12,
|
|
"prominent": 24,
|
|
"_unit": "deltaG shift",
|
|
"subdued": "sys.text.on-subtle (ΔG 40~54 구간). 불투명도 사용 금지."
|
|
},
|
|
|
|
"contrast_targets": {
|
|
"print": { "body": 70, "large": 55, "nontext": 40, "level": "AAA" },
|
|
"presentation": { "body": 70, "large": 55, "nontext": 40, "level": "AAA" },
|
|
"screen": { "body": 55, "large": 40, "nontext": 40, "level": "AA", "recommended": 70 }
|
|
}
|
|
},
|
|
|
|
"sys": {
|
|
"_note": "의미역할. 매체 프로파일이 값을 바인딩하는 유일한 지점. Layer 2·3은 여기만 참조한다.",
|
|
"pair": {
|
|
"surface-base": {
|
|
"light": { "container": "ref.color.sand", "on": "ref.color.brown", "on-subtle": "ref.color.brown", "border": "ref.color.brown", "deltaG": 68, "measured": 9.02 },
|
|
"dark": { "container": "ref.color.obsidian", "on": "ref.color.sand", "on-subtle": "ref.color.subtle","border": "ref.color.subtle", "deltaG": 91, "measured": 17.02 }
|
|
},
|
|
"surface-raised": {
|
|
"light": { "container": "ref.color.white", "on": "ref.color.brown", "border": "ref.color.brown", "deltaG": 72, "measured": 10.01 },
|
|
"dark": { "container": "ref.color.obsidian", "on": "ref.color.sand", "border": "ref.color.subtle","deltaG": 91, "measured": 17.02 }
|
|
},
|
|
"surface-emphasis": {
|
|
"light": { "container": "ref.color.green", "on": "ref.color.white", "on-subtle": "ref.color.subtle", "deltaG": 69, "measured": 8.87 },
|
|
"dark": { "container": "ref.color.green", "on": "ref.color.white", "on-subtle": "ref.color.subtle", "deltaG": 69, "measured": 8.87 }
|
|
},
|
|
"surface-accent": {
|
|
"light": { "container": "ref.color.orange", "on": "ref.color.white", "deltaG": 47, "measured": 4.01, "restriction": "large_text_only" },
|
|
"dark": { "container": "ref.color.orange", "on": "ref.color.white", "deltaG": 47, "measured": 4.01, "restriction": "large_text_only" }
|
|
}
|
|
},
|
|
"text": {
|
|
"body": { "light": "ref.color.brown", "dark": "ref.color.sand" },
|
|
"heading": { "light": "ref.color.green", "dark": "ref.color.sand" },
|
|
"on-subtle": { "light": "ref.color.brown", "dark": "ref.color.subtle" },
|
|
"accent": { "light": "ref.color.orange", "dark": "ref.color.orange", "restriction": "large_text_only" }
|
|
},
|
|
"border": {
|
|
"default": { "light": "ref.color.brown", "dark": "ref.color.subtle" },
|
|
"subtle": { "light": "ref.color.brown", "dark": "ref.color.subtle", "opacity_screen_only": 0.2 },
|
|
"strong": { "light": "ref.color.green", "dark": "ref.color.sand" }
|
|
},
|
|
"bg": {
|
|
"canvas": { "light": "ref.color.sand", "dark": "ref.color.obsidian" },
|
|
"card": { "light": "ref.color.white", "dark": "ref.color.obsidian" }
|
|
},
|
|
"status": {
|
|
"do": "ref.status_color.do", "dont": "ref.status_color.dont",
|
|
"caution": "ref.status_color.caution", "tip": "ref.status_color.tip"
|
|
}
|
|
},
|
|
|
|
"contrast": {
|
|
"_method": "WCAG 2.x relative luminance. 전 쌍 프로그램 재계산 검증 완료 (2026-07-28).",
|
|
"_rule": "ΔG가 임계 미달이나 실측 통과하는 쌍은 본 목록에 등록되어야만 사용 가능 (CG-2). 암묵 허용 금지.",
|
|
"pairs": [
|
|
{ "fg": "brown", "bg": "sand", "deltaG": 68, "measured": 9.02, "pass": "AAA", "usage": "본문 기본" },
|
|
{ "fg": "green", "bg": "sand", "deltaG": 65, "measured": 8.00, "pass": "AAA", "usage": "제목·구조" },
|
|
{ "fg": "brown", "bg": "white", "deltaG": 72, "measured": 10.01, "pass": "AAA", "usage": "카드 위 본문" },
|
|
{ "fg": "green", "bg": "white", "deltaG": 69, "measured": 8.87, "pass": "AAA", "usage": "카드 위 제목", "_correction": "선행 시스템 8.93 표기 → 실측 8.87로 정정" },
|
|
{ "fg": "white", "bg": "green", "deltaG": 69, "measured": 8.87, "pass": "AAA", "usage": "그린 면 위 텍스트" },
|
|
{ "fg": "sand", "bg": "green", "deltaG": 65, "measured": 8.00, "pass": "AAA", "usage": "그린 면 위 텍스트" },
|
|
{ "fg": "subtle", "bg": "green", "deltaG": 54, "measured": 5.93, "pass": "AA", "usage": "그린 면 위 보조 텍스트", "_registered": "ΔG 54 < 55 임계 미달, 실측 통과로 명시 등록 (CG-2)" },
|
|
{ "fg": "white", "bg": "brown", "deltaG": 72, "measured": 10.01, "pass": "AAA", "usage": "브라운 면 위 텍스트" },
|
|
{ "fg": "sand", "bg": "obsidian", "deltaG": 91, "measured": 17.02, "pass": "AAA", "usage": "다크 면 위 텍스트" },
|
|
{ "fg": "subtle", "bg": "obsidian", "deltaG": 80, "measured": 12.61, "pass": "AAA", "usage": "다크 면 위 보조 텍스트" },
|
|
{ "fg": "orange", "bg": "obsidian", "deltaG": 48, "measured": 4.71, "pass": "AA", "usage": "다크 면 위 악센트" },
|
|
{ "fg": "orange", "bg": "sand", "deltaG": 43, "measured": 3.61, "pass": "LARGE_ONLY", "usage": "대형 악센트 전용" },
|
|
{ "fg": "white", "bg": "orange", "deltaG": 47, "measured": 4.01, "pass": "LARGE_ONLY", "usage": "오렌지 면 위 텍스트" },
|
|
{ "fg": "orange", "bg": "white", "deltaG": 47, "measured": 4.01, "pass": "LARGE_ONLY", "usage": "흰 카드 위 대형 악센트 전용", "_registered": "v0.1.1 신설 (진단 G5)" },
|
|
{ "fg": "green", "bg": "obsidian", "deltaG": 26, "measured": 2.13, "pass": "FAIL", "usage": "금지 — 그린은 다크 위에서 면·도형으로만" }
|
|
],
|
|
"status_pairs": [
|
|
{ "id": "do", "deltaG": 58, "measured_on_container": 6.59, "measured_on_sand": 7.36 },
|
|
{ "id": "dont", "deltaG": 58, "measured_on_container": 6.58, "measured_on_sand": 7.55 },
|
|
{ "id": "caution", "deltaG": 58, "measured_on_container": 6.60, "measured_on_sand": 7.27 },
|
|
{ "id": "tip", "deltaG": 59, "measured_on_container": 6.91, "measured_on_sand": 7.73 }
|
|
],
|
|
"forbidden": [
|
|
{ "fg": "green", "bg": "obsidian", "reason": "ΔG 26 < 40, 실측 2.13:1 — 텍스트 사용 절대 금지" },
|
|
{ "fg": "orange", "bg": "sand", "context": "body_text", "reason": "ΔG 43 < 55 — 본문 사용 금지, 대형 전용" }
|
|
]
|
|
},
|
|
|
|
"mediums": {
|
|
|
|
"print": {
|
|
"unit_primary": "mm",
|
|
"unit_type": "pt",
|
|
"pt_to_mm": 0.352778,
|
|
"resolution": 300,
|
|
"type_base": "10pt",
|
|
"space_base_unit": "6mm",
|
|
"baseline_grid": "6mm",
|
|
"baseline_check": { "body_lineheight_pt": 17.0, "mm": 5.9972, "target_mm": 6.0, "error_mm": -0.0028 },
|
|
"contrast_target": "AAA",
|
|
"elevation": { "sunken": "tone", "default": "none", "raised": "border", "overlay": "border+isolation" },
|
|
"shadow": "forbidden",
|
|
"alpha": "forbidden",
|
|
"type_scale": {
|
|
"caption": "7.9pt", "body-sm": "8.9pt", "body": "10.0pt", "body-lg": "11.3pt",
|
|
"title-sm": "12.7pt", "title": "16.0pt", "title-lg": "20.3pt",
|
|
"display": "28.9pt", "display-lg": "41.1pt"
|
|
},
|
|
"type_min": { "body": "9.0pt", "caption": "7.5pt", "absolute": "7.0pt", "reverse": "10.0pt" },
|
|
"type_scale_dual_medium": {
|
|
"_note": "투사 겸용 시 base를 3 스텝 상향 (10pt → 14.2pt)",
|
|
"body": "14.2pt", "caption": "11.3pt", "body-sm": "12.7pt", "title-sm": "18.0pt", "title": "22.8pt"
|
|
},
|
|
"space": { "025": "1.5mm", "050": "3mm", "100": "6mm", "150": "9mm", "200": "12mm", "300": "18mm", "400": "24mm", "600": "36mm", "800": "48mm" },
|
|
"radius": { "none": 0, "sm": "1.5mm", "md": "3mm", "lg": "4.5mm" },
|
|
"stroke": { "hairline": "0.20mm", "regular": "0.40mm", "bold": "0.60mm", "icon": "0.80mm", "connector": "1.00mm" },
|
|
"stroke_min": { "normal": "0.15mm", "reverse": "0.25mm" },
|
|
"drafting_line_weights": {
|
|
"iso_series_mm": [0.13, 0.18, 0.25, 0.35, 0.5, 0.7, 1.0, 1.4, 2.0],
|
|
"base_by_format": { "A4": 0.35, "A3": 0.35, "A2": 0.35, "A1": 0.5, "A0": 0.7 },
|
|
"outline": "0.35mm", "hidden_center_dim": "0.18mm", "section": "0.5mm"
|
|
},
|
|
"formats": {
|
|
"A3-landscape": {
|
|
"size_mm": [420, 297], "margin_lr": 24, "margin_top": 21, "margin_bottom": 24,
|
|
"content_mm": [372, 252], "columns": 12, "gutter": 6, "column_w": 25.5,
|
|
"baselines": 42, "type_area_ratio": 0.752,
|
|
"integrity": "12*25.5 + 11*6 = 372",
|
|
"zones": { "12col": 372, "8col": 246, "6col": 183, "4col": 120, "3col": 88.5 },
|
|
"measure_em": { "1col_12": 105.4, "2col_6": 51.9, "3col_4": 34.0, "4col_3": 25.1 },
|
|
"recommended_columns": [3, 4]
|
|
},
|
|
"A3-portrait": {
|
|
"size_mm": [297, 420], "margin_lr": 24, "margin_top": 21, "margin_bottom": 27,
|
|
"content_mm": [249, 372], "columns": 12, "gutter": 3, "column_w": 18,
|
|
"baselines": 62, "type_area_ratio": 0.741,
|
|
"integrity": "12*18 + 11*3 = 249",
|
|
"measure_em": { "2col_6": 34.9, "3col_4": 23.0 },
|
|
"recommended_columns": [2, 3]
|
|
},
|
|
"A4-portrait": {
|
|
"size_mm": [210, 297], "margin_lr": 12, "margin_top": 21, "margin_bottom": 24,
|
|
"content_mm": [186, 252], "columns": 12, "gutter": 6, "column_w": 10,
|
|
"baselines": 42, "type_area_ratio": 0.752,
|
|
"integrity": "12*10 + 11*6 = 186",
|
|
"measure_em": { "1col_12": 52.7, "2col_6": 25.5 },
|
|
"recommended_columns": [2],
|
|
"_office_printer_variant": { "margin_lr": 15, "content_w": 180, "column_w": 9.5 }
|
|
},
|
|
"A4-portrait-single": {
|
|
"size_mm": [210, 297], "margin_lr": 39, "margin_top": 21, "margin_bottom": 24,
|
|
"content_mm": [132, 252], "columns": 12, "gutter": 3, "column_w": 8.25,
|
|
"baselines": 42, "type_area_ratio": 0.533,
|
|
"measure_em": { "1col_12": 37.4 }, "recommended_columns": [1]
|
|
},
|
|
"A4-landscape": {
|
|
"size_mm": [297, 210], "margin_lr": 24, "margin_top": 15, "margin_bottom": 21,
|
|
"content_mm": [249, 174], "columns": 12, "gutter": 3, "column_w": 18,
|
|
"baselines": 29, "type_area_ratio": 0.695,
|
|
"measure_em": { "2col_6": 34.9, "3col_4": 23.0 }, "recommended_columns": [2, 3]
|
|
}
|
|
},
|
|
"cmyk": {
|
|
"body_text": "100% K only",
|
|
"rich_black": "C60 M40 Y40 K100",
|
|
"rich_black_tac": 240,
|
|
"min_tint_percent": 10,
|
|
"profile_default": "FOGRA51 / PSO Coated v3 (TAC 300%)",
|
|
"fogra39_tac": 330,
|
|
"korean_market_profile": null,
|
|
"_note": "브랜드 색의 CMYK 등가값은 인쇄소가 목표 프로파일로 산출한 값을 정본으로 한다 (CV-1). 등록 전 산출물 확정 금지 (CV-3)."
|
|
},
|
|
"handbook": {
|
|
"pagination": "chapter-relative",
|
|
"pagination_format": "<chapter>-<page>",
|
|
"front_matter": "roman-lowercase",
|
|
"appendix_format": "부록<X>-<page>",
|
|
"numbering_standard": "ISO 2145",
|
|
"numbering_max_depth": 4,
|
|
"index_entries_ratio": 2.0,
|
|
"index_refs_per_page": [5, 6],
|
|
"index_page_ratio": 0.05,
|
|
"index_subentry_threshold": 6,
|
|
"cross_ref_format": "(→ N.N절, p.C-P)"
|
|
}
|
|
},
|
|
|
|
"presentation": {
|
|
"unit_primary": "px",
|
|
"canvas": [1920, 1080],
|
|
"aspect_ratio": 1.7778,
|
|
"px_to_emu": 6350,
|
|
"px_to_pt": 0.5,
|
|
"px_to_inch": 0.006944444,
|
|
"emu_canvas": [12192000, 6858000],
|
|
"pptx_default_widescreen_match": true,
|
|
"type_base": "24px",
|
|
"space_base_unit": "12px",
|
|
"baseline_grid": null,
|
|
"contrast_target": "AAA",
|
|
"elevation": { "sunken": "tone", "default": "none", "raised": "border", "overlay": "border+isolation" },
|
|
"shadow": "forbidden",
|
|
"alpha": "forbidden",
|
|
"type_scale": {
|
|
"caption": 19, "body-sm": 21, "body": 24, "body-lg": 27,
|
|
"title-sm": 30, "title": 38, "title-lg": 49, "display": 69, "display-lg": 99
|
|
},
|
|
"type_scale_pt": {
|
|
"caption": 9.5, "body-sm": 10.5, "body": 12.0, "body-lg": 13.5,
|
|
"title-sm": 15.0, "title": 19.0, "title-lg": 24.5, "display": 34.5, "display-lg": 49.5
|
|
},
|
|
"type_min": { "body_divisor": 45, "absolute_divisor": 57, "body_px": 24, "absolute_px": 19 },
|
|
"tracking": { "display-lg": "-0.02em", "display": "-0.015em", "_below": 0 },
|
|
"space": { "025": 3, "050": 6, "100": 12, "150": 18, "200": 24, "300": 36, "400": 48, "600": 72, "800": 96 },
|
|
"radius": { "none": 0, "sm": 6, "md": 12, "lg": 18 },
|
|
"stroke": { "hairline": 2, "regular": 3, "bold": 4, "icon": 5, "connector": 7 },
|
|
"stroke_min": 2,
|
|
"grid": {
|
|
"margin": 48, "gutter": 24, "columns": 12, "column_w": 130, "content_w": 1824,
|
|
"integrity": "12*130 + 11*24 = 1824",
|
|
"column_x": [48, 202, 356, 510, 664, 818, 972, 1126, 1280, 1434, 1588, 1742],
|
|
"x_formula": "X(i) = 48 + (i-1)*154",
|
|
"zones": { "12col": 1824, "8col": 1208, "6col": 900, "4col": 592, "3col": 438 },
|
|
"measure_em": { "12col": 76.0, "8col": 50.3, "6col": 37.5, "4col": 24.7, "3col": 18.3 },
|
|
"body_max_cols": 6
|
|
},
|
|
"vertical": {
|
|
"margin_top": 48, "header_top": 48, "header_bottom": 192,
|
|
"content_top": 216, "content_bottom": 960,
|
|
"footer_top": 984, "footer_bottom": 1032, "margin_bottom": 48,
|
|
"content_band_h": 744, "grid_unit": 12
|
|
},
|
|
"projection": {
|
|
"XGA": { "res": [1024, 768], "effective": [1024, 576], "scale": 0.533 },
|
|
"WXGA": { "res": [1280, 800], "effective": [1280, 720], "scale": 0.667 },
|
|
"FHD": { "res": [1920, 1080], "effective": [1920, 1080], "scale": 1.0 },
|
|
"WUXGA": { "res": [1920, 1200], "effective": [1920, 1080], "scale": 1.0 },
|
|
"UHD": { "res": [3840, 2160], "effective": [3840, 2160], "scale": 2.0 }
|
|
},
|
|
"highlight_slide_max_ratio": 0.10
|
|
},
|
|
|
|
"screen": {
|
|
"variants": ["web", "mobile"],
|
|
"mobile_breakpoints": ["xs", "sm", "md"],
|
|
"unit_primary": "rem",
|
|
"unit_mobile": "dp",
|
|
"root_font_size": 16,
|
|
"type_base": "1rem",
|
|
"space_base_unit": 8,
|
|
"baseline_grid": null,
|
|
"contrast_target": "AA",
|
|
"contrast_recommended": "AAA",
|
|
"elevation": { "sunken": "tone+inset-border", "default": "none", "raised": "border+shadow", "overlay": "shadow", "modal": "shadow+scrim" },
|
|
"shadow": "allowed",
|
|
"alpha": "allowed",
|
|
"runtime_theme": true,
|
|
"type_scale_px": {
|
|
"caption": 13, "body-sm": 14, "body": 16, "body-lg": 18,
|
|
"title-sm": 20, "title": 26, "title-lg": 32, "display": 46, "display-lg": 66
|
|
},
|
|
"type_scale_rem": {
|
|
"caption": 0.8125, "body-sm": 0.875, "body": 1, "body-lg": 1.125,
|
|
"title-sm": 1.25, "title": 1.625, "title-lg": 2, "display": 2.875, "display-lg": 4.125
|
|
},
|
|
"type_responsive": {
|
|
"_rule": "xs·sm에서 display 계열 인덱스 -3 이동. body 계열은 불변.",
|
|
"xs_sm": { "display-lg": 32, "display": 26 }
|
|
},
|
|
"measure_max_em": 38,
|
|
"space": { "025": 2, "050": 4, "100": 8, "150": 12, "200": 16, "300": 24, "400": 32, "600": 48, "800": 64 },
|
|
"radius": { "none": 0, "sm": 4, "md": 8, "lg": 12, "pill": 9999 },
|
|
"stroke": { "hairline": 1, "regular": 2, "bold": 3, "icon": 2, "connector": 2 },
|
|
"breakpoints": {
|
|
"xs": { "min": 0, "max": 599, "columns": 4, "margin": 16, "gutter": 16, "ref_width": 360, "column_w": 70, "integrity": "4*70 + 3*16 = 328" },
|
|
"sm": { "min": 600, "max": 903, "columns": 8, "margin": 24, "gutter": 16, "ref_width": 600, "column_w": 55, "integrity": "8*55 + 7*16 = 552" },
|
|
"md": { "min": 904, "max": 1239, "columns": 8, "margin": 32, "gutter": 24, "ref_width": 904, "column_w": 84, "integrity": "8*84 + 7*24 = 840" },
|
|
"lg": { "min": 1240, "max": 1599, "columns": 12, "margin": 32, "gutter": 24, "ref_width": 1240, "column_w": 76, "integrity": "12*76 + 11*24 = 1176" },
|
|
"xl": { "min": 1600, "max": null, "columns": 12, "margin": 24, "gutter": 24, "container": 1440, "column_w": 94, "integrity": "12*94 + 11*24 = 1392" }
|
|
},
|
|
"interaction": {
|
|
"method": "grade-shift",
|
|
"grade_shift": { "default": 0, "hover": 4, "focus": 0, "active": 8, "selected": 12 },
|
|
"disabled": "sys.text.on-subtle",
|
|
"state_layer_fallback": { "hover": 0.08, "focus": 0.10, "active": 0.10, "dragged": 0.16,
|
|
"_drift": "MD3 문서 10% vs material-web v0.192 토큰 12% 불일치 (benchmark §18-2). 문서값 채택." },
|
|
"hover_on_mobile": false
|
|
},
|
|
"focus": { "width": 3, "offset": 2, "style": "double-ring", "min_deltaG": 40, "visible_only": true },
|
|
"target_size": { "web_min": 44, "web_recommended": 48, "mobile_min": 48, "adjacent_gap_min": 8, "edge_exclusion": 4 },
|
|
"z_index": { "base": 0, "raised": 100, "sticky": 200, "dropdown": 300, "scrim": 400, "modal": 500, "popover": 600, "toast": 700, "tooltip": 800 },
|
|
"scrim_opacity": 0.32,
|
|
"motion": {
|
|
"duration": { "instant": 0, "fast": 100, "moderate": 200, "slow": 300, "deliberate": 500 },
|
|
"easing": {
|
|
"standard": "cubic-bezier(0.2, 0, 0, 1)",
|
|
"enter": "cubic-bezier(0, 0, 0, 1)",
|
|
"exit": "cubic-bezier(0.3, 0, 1, 1)",
|
|
"linear": "linear"
|
|
},
|
|
"animatable_properties": ["transform", "opacity"],
|
|
"reduced_motion_required": true
|
|
},
|
|
"a11y": { "target_level": "WCAG 2.2 AA", "ci_gate": true, "tools": ["axe", "pa11y", "stylelint"] }
|
|
},
|
|
|
|
"presentation.ultrawide": {
|
|
"_note": "M7 (2026-09-29). presentation 변형 — grid·center 외 값은 mediums.presentation 승계. 문서: design.medium.ultrawide.md",
|
|
"inherits": "presentation",
|
|
"canvas": [3840, 1080],
|
|
"aspect_ratio": 3.5556,
|
|
"emu_canvas": [24384000, 6858000],
|
|
"grid": {
|
|
"margin": 48, "gutter": 24, "columns": 24, "column_w": 133, "content_w": 3744,
|
|
"integrity": "24*133 + 23*24 = 3744",
|
|
"x_formula": "X(i) = 48 + (i-1)*157",
|
|
"zones": { "24col": 3744, "16col": 2488, "12col": 1860, "8col": 1232, "6col": 918, "5col": 761, "4col": 604, "3col": 447 },
|
|
"measure_em": { "12col": 77.5, "8col": 51.3, "6col": 38.2, "5col": 31.7, "4col": 25.2, "3col": 18.6 },
|
|
"body_max_cols": 6,
|
|
"text_max_width": 1860,
|
|
"splits": ["24", "12:12", "6:6:12", "6:6:6:6", "16:8", "8:16"]
|
|
},
|
|
"center": { "line": 1920, "gutter": [1908, 1932], "rule": "text-no-cross" }
|
|
}
|
|
},
|
|
|
|
"comp": {
|
|
"_note": "컴포넌트 속성. 리터럴 금지 — sys/foundation 참조만 (TN-1). 경로 표기는 최상위 블록명부터 전체 경로로 적는다 (sys.* / foundation.* / mediums.<medium>.*) — v0.1.1 정규화.",
|
|
"_catalog_count": 25,
|
|
"eyebrow": { "type": "caption", "tone": "eyebrow", "color": "sys.text.on-subtle", "tick_color": "sys.text.accent", "label_max_chars": 20 },
|
|
"header": { "title_type": "title-lg", "title_max_chars": 40, "title_recommended_chars": 25, "meta_slots": 4, "border_bottom": "sys.border.strong" },
|
|
"hero": { "headline_type": "display", "headline_max_chars": 35, "subtitle_type": "body-lg", "subtitle_max_chars": 60, "accent_words_max": 1 },
|
|
"rule": { "stroke": "foundation.stroke.hairline", "color": "sys.border.subtle" },
|
|
"footer": { "type": "caption", "color": "sys.text.on-subtle" },
|
|
"card": { "radius": "foundation.radius.md", "padding": "space.200", "border": "sys.border.subtle", "bg": "sys.bg.card", "title_max_chars": 20, "body_max_chars": 120, "nest_depth_max": 2 },
|
|
"stagecard": { "radius": "foundation.radius.md", "padding": "space.200", "name_max_chars": 15, "desc_max_chars": 60, "steps_range": [3, 5], "highlight_max": 1 },
|
|
"connector": { "stroke": "foundation.stroke.connector", "color": "sys.border.default", "terminal_color": "sys.text.accent" },
|
|
"principle": { "bar_color": "sys.text.accent", "kicker_max_chars": 12, "statement_max_chars": 80, "per_view_max": 1 },
|
|
"table": { "header_type": "body-sm", "cell_type": "body-sm", "cell_max_chars": 40, "stripe_deltaG": [5, 9], "empty_cell": "—" },
|
|
"stat": { "value_type": "display", "value_tone": "metric", "label_type": "caption", "label_tone": "label", "label_max_chars": 15, "per_zone_max": 3 },
|
|
"chartframe": { "title_max_chars": 25, "series_max": 5, "pattern_required_from": 3 },
|
|
"specsheet": { "position": "item-tail-fixed", "no_value": "—", "not_applicable": "N/A" },
|
|
"directive": { "statement_recommended_chars": [80, 100], "statement_max_chars": 130, "symbol_required": true, "label_max_chars": 6 },
|
|
"badge": { "text_max_chars": 6, "variants_max": 4, "form_encoding_required": true },
|
|
"scope": { "item_max_chars": 30, "apply_items_max": 4, "exclude_items_max": 3 },
|
|
"toc": { "depth_max": 2, "position": "chapter-first-page" },
|
|
"stepper": { "steps_range": [3, 7], "states": ["done", "current", "pending"] },
|
|
"xref": { "print_format": "(→ N.N절, p.C-P)", "presentation_format": "(→ N.N)" },
|
|
"mediaframe": { "caption_max_chars": 60, "aspect_ratios": "foundation.grid.aspect_ratios_allowed" },
|
|
"button": { "label_max_chars": 8, "primary_per_view_max": 1, "min_target": "mediums.screen.target_size.web_min" },
|
|
"input": { "help_max_chars": 40, "error_max_chars": 60, "placeholder_as_label": false },
|
|
"modal": { "scrim": "mediums.screen.scrim_opacity", "focus_trap": true, "nest": false },
|
|
"toast": { "min_duration_ms": 5000, "concurrent_max": 1 },
|
|
"disclosure": { "print_expanded": true, "state_persisted": true }
|
|
},
|
|
|
|
"rules": {
|
|
"forbidden_all_mediums": [
|
|
"미정의 토큰 참조",
|
|
"comp 계층 리터럴 값",
|
|
"ref 직접 참조 (Layer 2·3)",
|
|
"산출물 내 HEX·치수 리터럴",
|
|
"contrast.pairs 미등록 색 조합",
|
|
"ΔG < 40 조합의 텍스트 사용",
|
|
"HSL 기반 팔레트 보간",
|
|
"색 단독 정보 전달",
|
|
"차트 색 면 위 텍스트",
|
|
"순백 전면 배경",
|
|
"그라디언트 배경",
|
|
"악센트 경제 초과",
|
|
"텍스트 잘림(truncation) 설계",
|
|
"허용 목록 외 그리드 분할",
|
|
"허용 목록 외 종횡비"
|
|
],
|
|
"forbidden_print_presentation": ["그림자(box-shadow) 산출", "알파 색 (사전 평탄화 필수)"],
|
|
"forbidden_screen": ["outline: none (대체 없이)", "토큰 외 z-index", "양수 tabindex", "텍스트 색에 알파", "root font-size px 고정"],
|
|
"citation_forbidden": [
|
|
"Apple HIG '8pt 그리드' (공식 규정 없음)",
|
|
"GOV.UK $govuk-print-styles 변수 (존재하지 않음)",
|
|
"'GOV.UK는 인쇄 시 헤더/푸터를 숨긴다' (사실 아님)",
|
|
"USWDS '이상적 characters-per-line' (문서에 없음)",
|
|
"SLDS Anatomy/States/Do-Don't 섹션 (존재하지 않음)",
|
|
"Polaris 알파벳순 terminology list (존재하지 않음)",
|
|
"Carbon 종횡비 3:4 · 1:2 (공식 목록 미포함)",
|
|
"Atlassian 'group/variant/state' 토큰 용어 (공식 용어 아님)",
|
|
"Atlassian base/semantic/component 3계층 모델 (공식 문서에 없음)",
|
|
"FOGRA39 TAC 350% (오류 — 330%)",
|
|
"Polaris voice-and-tone/actionable-language/help-documentation 현행 (2025-01-07 삭제)",
|
|
"MD3 '톤 40=3:1 / 50=4.5:1' 일반 규칙 (문서에 없음)"
|
|
]
|
|
},
|
|
|
|
"verification": {
|
|
"foundation_auto": ["F1 토큰 참조 무결성", "F2 리터럴 검출", "F3 hex↔rgb 정합", "F4 대비 페어 검증", "F5 ΔG 임계 준수", "F6 그리드 정합", "F7 베이스라인 정합", "F8 매체 값셋 완전성", "F9 md↔json 드리프트"],
|
|
"counts": {
|
|
"foundation": { "auto": 9, "visual": 7 },
|
|
"print": { "auto": 16, "visual": 10 },
|
|
"presentation": { "auto": 18, "visual": 8 },
|
|
"screen": { "auto": 18, "manual": 10 },
|
|
"presentation.ultrawide": { "auto_added": 6, "visual_added": 1 },
|
|
"components": { "checklist": 14 },
|
|
"modules": { "structure": 12, "output": 10 }
|
|
}
|
|
}
|
|
}
|