# 변환 완료 블록 도서관 > 변환된 모든 블록의 1줄 요약 + 변형 가능 축. **새 변환 시작 전 (PROCESS.md STEP 0-A) 이 파일을 먼저 읽어** 지난 패턴과 비교한다. > > 패턴이 **2번째** 등장하는 순간 → `templates_staging/` 에 Jinja2 추출. 그 다음 사용자가 검수 후 design_agent 본체로 프로모션. --- ## 사용 방법 ``` 새 프레임 변환 시작: STEP 0-A. 이 파일 읽기 (필수) ↓ STEP 0-C. 첫 metadata/screenshot 후 비교 ↓ 비슷한 구조 발견 → 두 번째 → templates_staging/ 로 Jinja2 추출 비슷한 구조 없음 → 일반 변환 → 새 행 추가 ``` ## 컬럼 의미 | 컬럼 | 의미 | |------|------| | slug | block-tests/{slug}.html 파일명 | | frame | Figma 노드 ID + 이름 | | size | 원본 W×H px | | pattern | 구조적 패턴 (사이클/비교/카드/표/...) | | 변형 축 | 템플릿화 시 파라미터가 될 것들 (1줄) | | 상태 | static / staged / promoted | | date | 변환 날짜 | **상태 의미:** - `static`: block-tests/ 정적 변환물만 존재 (Stage 1) - `staged`: templates_staging/ 에 Jinja2 템플릿 작성됨 (Stage 2, 사용자 검수 대기) - `promoted`: 사용자가 design_agent/templates/ 본체로 이전 + catalog.yaml 등록 완료 --- ## 변환 완료 (현행 방법론) | slug | frame | size | pattern | 상태 | date | |------|-------|------|---------|------|------| | [bim-goals-3circles](block-tests/bim-goals-3circles.html) | 66:310 / Frame 1171281211 | 2062×957 | cycle-3way-intersect | **promoted** → [block](../../templates/blocks/new/cycle-3way-intersect.html) + [catalog](../../templates/catalog.yaml) | 2026-04-13 | | [bim-3roles-cards](block-tests/bim-3roles-cards.html) | 45:16 / Frame 1171281191 | 2601×1927 | cards-3col-persona | **promoted** → [block](../../templates/blocks/new/cards-3col-persona.html) + [catalog](../../templates/catalog.yaml) | 2026-04-13 | | [bim-future-statement](block-tests/bim-future-statement.html) | 51:170 / Frame 1171281207 | 3547×163 | statement-pill-highlight | **promoted** → [block](../../templates/blocks/new/statement-pill-highlight.html) + [catalog](../../templates/catalog.yaml) | 2026-04-13 | | [bim-vs-dx-table](block-tests/bim-vs-dx-table.html) | 45:20 / Frame 1171281195 | 1868×1908 | compare-vs-rows | **promoted** → [block](../../templates/blocks/new/compare-vs-rows.html) + [catalog](../../templates/catalog.yaml) | 2026-04-13 | | [bim-issues-quadrant](block-tests/bim-issues-quadrant.html) | 45:18 / Frame 1171281193 | 2226×1766 | quadrant-2x2-issues | **promoted** → [block](../../templates/blocks/new/quadrant-2x2-issues.html) + [catalog](../../templates/catalog.yaml) | 2026-04-13 | | [bim-issues-paired](block-tests/bim-issues-paired.html) | 45:19 / Frame 1171281194 | 1857×1326 | issues-paired-rows | **promoted** → [block](../../templates/blocks/new/issues-paired-rows.html) + [catalog](../../templates/catalog.yaml) | 2026-04-13 | | [bim-info-products](block-tests/bim-info-products.html) | 45:5 / Frame 1171281180 | 1153×592 | stacked-arrow-list | **promoted** → [block](../../templates/blocks/new/stacked-arrow-list.html) + [catalog](../../templates/catalog.yaml) | 2026-04-13 | | [bim-sw-overview](block-tests/bim-sw-overview.html) | 45:27 / Frame 1171281202 | 1863×834 | split-panel-numbered | **promoted** → [block](../../templates/blocks/new/split-panel-numbered.html) + [catalog](../../templates/catalog.yaml) | 2026-04-13 | ### 변형 축 + 슬롯 옵션 (각 변환물 상세) #### bim-goals-3circles ``` circles[3] (required) ├─ label (required) ├─ gradient_from / gradient_to (required) └─ accents[N=0~3] (optional) └─ char (한자/문자) + color side_labels[N=0~12] (optional) ← 라벨 없는 mdx도 가능 arcs[3] (optional, 곡선 PNG) deco_gradient (optional) bg_texture (optional) ``` Sub-patterns: 없음 (특수 패턴, 재사용성 낮음) #### bim-3roles-cards ``` columns[N=2~4] (required) ├─ role_label (required, 2-line: ["역할", "목표"]) ├─ role_color (required) ├─ badge (required) │ ├─ outer_image (required) │ └─ inner_image (required) ├─ bg_image (required) ├─ overlay_image (required) ├─ bullet_items[N=1~12] (required, 한 줄당 1개 sentence) └─ bottom_photo (optional) ← 사진 없는 mdx도 이 블록 매칭 가능 ``` Sub-patterns: **bullet-list-with-marker (R13)** — 각 컬럼의 bullet_items 영역 --- ## 패턴 카탈로그 (전체 블록 단위) | pattern_id | 설명 | 등장 횟수 | 변환물 | 템플릿화 | |-----------|------|---------|--------|---------| | cycle-3way-intersect | 3개 큰 원이 교차하며 사이드 라벨 + 한자 액센트 | 1 | bim-goals-3circles | **✓ templates_staging/cycle-3way-intersect.html.j2** (1 example 검증) | | cards-3col-persona | N stakeholder 세로 카드 (BG 사진 + 오버레이 + 원형 뱃지 + bullet list + optional 하단 사진) | 1 | bim-3roles-cards | **✓ templates_staging/cards-3col-persona.html.j2** (2 examples 검증: 사진 있음/없음) | | statement-pill-highlight | 단일 line 메시지 banner. pill 모양 + optional bg image + inline highlighted span | 1 | bim-future-statement | **✓ templates_staging/statement-pill-highlight.html.j2** | | compare-vs-rows | N개 카테고리 비교 표. 각 행 = 좌(A) \| 중앙(라벨) \| 우(B). + 헤더 + 메인 pill + optional 결론 박스 | 1 | bim-vs-dx-table | **✓ templates_staging/compare-vs-rows.html.j2** | | quadrant-2x2-issues | 2×2 카테고리 그리드 (issue/diagnosis). 각 카테고리에 N개의 (red headline + bullet body). + optional 가운데 인용구 원 | 1 | bim-issues-quadrant | **✓ templates_staging/quadrant-2x2-issues.html.j2** | | issues-paired-rows | N개 행, 각 행 = 좌/우 이슈 (라벨 pill + 본문), 가운데 구분선, pill 위치 교차 | 1 | bim-issues-paired | **✓ templates_staging/issues-paired-rows.html.j2** | | stacked-arrow-list | N개 항목 계단식 리스트 (rounded pill + 색상 border + 화살표 마커 + optional 좌측 arc 장식) | 1 | bim-info-products | **✓ templates_staging/stacked-arrow-list.html.j2** | | split-panel-numbered | 좌: 카테고리별 리스트 (BG + 헤더) / 우: 번호 badge + 설명 N개 | 1 | bim-sw-overview | **✓ templates_staging/split-panel-numbered.html.j2** | ## Sub-pattern 카탈로그 (atomic 재사용 단위) 블록 안에 들어있는 작은 재사용 가능 패턴. 여러 다른 블록에서 반복 등장 가능. | sub_pattern_id | RULES.md | 설명 | 등장 횟수 | 발견 위치 | |---------------|---------|------|---------|---------| | bullet-list-with-marker | **R13** | 각 텍스트 앞에 장식 마커(체크박스/점/화살표/숫자/PNG) + flex pair 구조 | 1 | cards-3col-persona의 컬럼 본문 | | (다른 sub-pattern은 발견 시 추가) | | | | | **Sub-pattern 등록 규칙:** - 1번째 발견: blocks_index.md에만 메모 (여기 표에 추가) - 2번째 발견: RULES.md에 R번호 부여하여 정식 등록 + 두 변환물 모두 동일 구조 사용 확인 --- ## templates_staging 대기열 > 2번째 등장한 패턴이 여기에 들어옴. 사용자 검수 후 design_agent 본체로 프로모션. (아직 없음) --- ## 디자인 인사이트 (변환 중 발견된 원칙) > 매 변환에서 발견되는 재사용 가능한 디자인 원칙. RULES.md에 박힌 기술 규칙과 별개로, "이런 상황에서는 이렇게 접근한다" 류의 사고 원칙. ### I-1. 마커 + 텍스트 = 시맨틱 list (R13 sub-pattern) **상황:** Figma에서 체크박스 PNG / 점 / 화살표 / 숫자 등이 텍스트 앞에 있을 때. **잘못된 접근 (피해야 함):** - Figma의 평면 레이어 그대로 → 마커들을 별도 absolute 요소로 흩뿌림 - 텍스트와 마커가 분리된 상태로 동기화 시도 - 각 텍스트의 wrap 여부를 마커 위치에 반영 시도 (cascade 깨짐) **올바른 접근:** - 마커 + 텍스트 = **하나의 시맨틱 list item** 으로 묶음 (`.bullet-row` 또는 `