{
  "_meta": {
    "name": "DQ (Design Quality) 통합 규칙",
    "version": "1.0.0",
    "updated": "2026-04-04",
    "description": "모든 디자인 품질 규칙의 유일한 원본 (Single Source of Truth). 이 파일을 변경하면 모든 검증/평가/생성 도구에 자동 반영됨.",
    "consumers": [
      "teams/design/CLAUDE.md",
      "teams/design/DESIGN-QC-CHECKLIST.md",
      "teams/marketing/CLAUDE.md",
      "teams/marketing/DESIGN-BRIEF-TEMPLATE.md",
      "tools/validate-design-brief.py",
      "tools/dq_rules.py (Python import module)",
      "DQ 10항목 평가 (로키 QC)"
    ]
  },

  "font_sizes": {
    "_unit": "px",
    "_base_canvas": "1080px",
    "_description": "1080px 캔버스 기준 최소 폰트 크기. 다른 캔버스 사이즈에서는 비율 유지.",
    "core_metric":  { "min": 96,  "recommended": "96-140", "description": "핵심 수치 (금액, 퍼센트 등)" },
    "headline":     { "min": 84,  "recommended": "84-120", "description": "헤드라인/메인 카피" },
    "subhead":      { "min": 64,  "recommended": "64-84",  "description": "서브헤드/서브 카피" },
    "cta":          { "min": 40,  "recommended": "44-48",  "description": "CTA 텍스트" },
    "disclaimer":   { "min": 40,  "recommended": "40",     "description": "면책/최소 텍스트" },
    "absolute_min": 40,
    "absolute_min_rule": "어떤 텍스트도 40px 미만 절대 금지. 예외 없음."
  },

  "font_weights": {
    "core_metric":  { "min": 900, "max": 900, "label": "Black" },
    "headline":     { "min": 800, "max": 900, "label": "ExtraBold-Black" },
    "subhead":      { "min": 600, "max": 700, "label": "SemiBold-Bold" },
    "cta":          { "min": 700, "max": 800, "label": "Bold-ExtraBold" },
    "disclaimer":   { "min": 400, "max": 500, "label": "Regular-Medium" },
    "banned_weights": [100, 200, 300],
    "banned_weights_rule": "light/thin/hairline (300 이하) 메인/서브 카피 사용 절대 금지"
  },

  "font_ratio": {
    "hierarchy": "4:2:1",
    "description": "헤드라인 : 서브헤드 : 바디 = 4 : 2 : 1",
    "core_metric_multiplier": "1.5-2x of headline",
    "min_head_sub_ratio": 1.3,
    "recommended_head_sub_ratio": 1.5
  },

  "font_pairing": {
    "min_families": 2,
    "max_families": 3,
    "rule": "같은 폰트 하나로 메인/서브 쓰기 금지. 최소 2종 또는 동일 패밀리 내 웨이트 대비 필수.",
    "recommended_pairs": {
      "impact":    { "main": "Black Han Sans (Black)", "sub": "Pretendard (Regular)", "use": "SNS/이벤트" },
      "trust":     { "main": "나눔명조 (Bold)", "sub": "Pretendard (Regular)", "use": "보험/금융 ★1순위" },
      "emotion":   { "main": "GMarket Sans (Bold)", "sub": "Pretendard (Light)", "use": "감성/MZ" },
      "minimal":   { "main": "Pretendard (Black)", "sub": "Pretendard (Light)", "use": "미니멀/테크" }
    },
    "banned_fonts": ["궁서체", "궁서", "굴림", "굴림체", "바탕", "바탕체"]
  },

  "text_density": {
    "max_elements_per_slide": 3,
    "max_words_per_slide": 8,
    "elements_description": "메인 + 서브 + CTA (최대 3개)",
    "readability_test_seconds": 3,
    "readability_rule": "3초 안에 핵심 메시지 파악 가능해야 통과",
    "overflow_text_rule": "부가 설명은 배너가 아닌 광고 Primary Text에 넣을 것"
  },

  "overlay_rules": {
    "full_opaque_ban": true,
    "allowed": ["text-shadow", "하단 그라디언트", "텍스트 배경 blur 박스 (부분적)"],
    "rule": "배경 이미지 위 전면 불투명 레이어 금지. 부분적/그라디언트만 허용."
  },

  "layout": {
    "grid_unit": 8,
    "grid_rule": "모든 요소 간격을 8pt 배수(8/16/24/32/48px)로 통일",
    "alignment_rule": "하나의 정렬 원칙을 전체에 일관 적용. 혼재 금지.",
    "golden_ratio": {
      "top": "20% — 브랜드 로고/태그라인",
      "center": "50% — 핵심 메시지 (헤드라인 + 서브)",
      "bottom": "30% — CTA 버튼"
    }
  },

  "color": {
    "max_brand_colors": 3,
    "max_accent_colors": 1,
    "cta_min_contrast_ratio": 3.0,
    "aaa_contrast_ratio": 4.5,
    "rule": "브랜드 팔레트 2-3색 + 강조색 1색. CTA와 배경 최소 3:1 대비."
  },

  "dq_scoring": {
    "_description": "DQ 10항목 100점 평가 기준. 로키(QC) 평가 시 이 기준을 반드시 사용.",
    "pass_threshold": 93,
    "items": {
      "DQ-01": { "name": "레퍼런스 재현도",   "weight": 10, "description": "벤치마킹 레퍼런스와의 품질 일치도" },
      "DQ-02": { "name": "시각적 계층 구조",   "weight": 10, "description": "헤드→서브→CTA 시선 흐름 명확성" },
      "DQ-03": { "name": "프로 완성도",        "weight": 10, "description": "오버플로우, 정렬, 줄바꿈, 요소 수용" },
      "DQ-04": { "name": "피드 차별화",        "weight": 10, "description": "일반 배너 대비 시각적 차별성" },
      "DQ-05": { "name": "감정적 임팩트",      "weight": 10, "description": "카피+비주얼의 감정 유발력" },
      "DQ-06": { "name": "여백/레이아웃",      "weight": 10, "description": "8pt 그리드, 여백 활용, 균형" },
      "DQ-07": { "name": "색상 가시성/조화",   "weight": 10, "description": "WCAG 대비율, 팔레트 조화" },
      "DQ-08": { "name": "타이포그래피 품질",  "weight": 10, "description": "폰트 사이즈/비율/페어링 규칙 준수 — 이 파일의 font_sizes/font_weights/font_ratio/font_pairing 규칙 전체 적용" },
      "DQ-09": { "name": "CTA 효과성",        "weight": 10, "description": "CTA 명확성, 행동 유도, 시인성" },
      "DQ-10": { "name": "브랜드 일관성",      "weight": 10, "description": "동일 브랜드 셀 간 디자인 시스템 일치" }
    },
    "auto_fail_rules": [
      "font_sizes.absolute_min 위반 (40px 미만 텍스트 존재) → 즉시 FAIL",
      "font_sizes.headline.min 위반 (헤드라인 84px 미만) → DQ-08 최대 5점",
      "font_sizes.subhead.min 위반 (서브 64px 미만) → DQ-08 최대 6점",
      "font_pairing.min_families 위반 (1종 폰트만 사용) → DQ-08에서 -3점",
      "overlay_rules.full_opaque_ban 위반 → DQ-03에서 -3점"
    ]
  },

  "benchmarking": {
    "reference_file": "memory/specs/design-benchmark.md",
    "priority": [
      "1순위: 이 파일(dq-rules.json)의 규칙",
      "2순위: design-benchmark.md의 벤치마킹 기법",
      "3순위: 기타 가이드라인"
    ],
    "rule": "벤치마킹 결과는 '참고'가 아닌 필수 준수 기준"
  }
}
