Files
C.E.L_Slide_test2/figma_to_html_agent/block-tests/bim-3roles-cards.html
kyeongmin 51548fdc41 figma_to_html_agent 추가 + MCP/Claude 설정
figma_to_html_agent/:
- Figma MCP 기반 블록 추출 에이전트 (CLAUDE.md, PLAN.md, PROCESS.md 등)
- block-tests/: Figma→HTML 변환 결과물 (bim-3roles-cards 등)
- templates_staging/: Jinja2 템플릿 + meta.yaml + example.yaml
- figma-analysis/, figma-assets/: Figma 분석 데이터 + 에셋
- scripts/: gradient_math.py 등 유틸리티

설정:
- .mcp.json: Figma MCP 서버 연결 설정
- .claude/settings.json: Claude Code 프로젝트 설정

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 11:00:31 +09:00

369 lines
19 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=1280">
<title>BIM 3역할 목표 카드 (Frame 1171281191)</title>
<!--
============================================================
Figma → HTML 수학적 변환 (bottom-up, Pure CSS)
============================================================
원본 Frame: 2600.998 × 1927.004 px (node 45:16, Frame 1171281191)
Scale factor S = 1280 / 2600.998 = 0.49213
블록 높이 = 1927.004 × S ≈ 948.5 px
⚠️ 본 프레임은 16:9 (720) 보다 높음. 1:1 변환 단계는 슬라이드를 1280×949 로 만들어
원본을 그대로 보존. design_agent 본체 이전 시 컨텐츠 재배치 필요.
구현 전략: CSS transform: scale(S) 균일 축소
→ .inner 컨테이너는 Figma 원본 좌표(2601 × 1927) 그대로
→ 모든 위치/크기/폰트는 Figma 원본 px
플래튼: bim-3roles-cards_flat.md
============================================================
-->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@500;700&display=swap" rel="stylesheet">
<style>
* { margin:0; padding:0; box-sizing:border-box; }
body {
font-family: 'Noto Sans KR', sans-serif;
background: #e8ecf0;
display: flex; justify-content: center; align-items: center;
min-height: 100vh;
padding: 20px;
}
/* 1280×949 (16:9 초과 — 본 프레임 전용) */
.slide {
width: 1280px;
height: 948.5px;
background: #ffffff;
position: relative;
display: flex; align-items: center; justify-content: center;
box-shadow: 0 4px 20px rgba(0,0,0,.15);
}
.block {
width: 1280px;
height: 948.5px;
background: #ffffff;
position: relative;
overflow: hidden;
}
.inner {
position: absolute;
left: 0; top: 0;
width: 2600.998px;
height: 1927.004px;
transform: scale(0.492129);
transform-origin: top left;
}
/* ─────────────────────────────────────────────────────────
레이어 1 — 3 컬럼 배경 (image 2977 × 3, same src)
각 컬럼 833/834 wide, 1844.7 tall, top 82.3
───────────────────────────────────────────────────────── */
.col-bg { position: absolute; top: 82.3px; height: 1844.701px; }
.col-bg img { width: 100%; height: 100%; object-fit: cover; display: block; }
.col-bg--left { left: 43px; width: 833px; }
.col-bg--mid { left: 880px; width: 834px; }
.col-bg--right { left: 1718px; width: 833px; }
/* ─────────────────────────────────────────────────────────
레이어 2 — 컬러 오버레이 (CSS 단색 + opacity 0.80)
Figma MCP 확인: opacity-80, 각 컬럼 다른 색상
픽셀 분석: left=#d6e7c4, mid=#e1efe1, right=#d0c0ad
border-radius 추정: ~30px (이미지 모서리 anti-alias 패턴)
───────────────────────────────────────────────────────── */
.col-overlay { position: absolute; top: 180.66px; opacity: 0.80; border-radius: 30px; }
.col-overlay--left { left: 114.01px; width: 691px; height: 1510.487px; background: #d6e7c4; }
.col-overlay--mid { left: 948.01px; width: 692px; height: 1053.828px; background: #e1efe1; }
.col-overlay--right { left: 1783.01px; width: 691px; height: 1128.098px; background: #d0c0ad; }
/* ─────────────────────────────────────────────────────────
레이어 3 — 하단 사진 카드 3개 (둥근 모서리, opacity 0.70)
───────────────────────────────────────────────────────── */
.bottom-photo {
position: absolute;
top: 1150.18px;
width: 697px;
height: 700.545px;
border-radius: 50px;
opacity: 0.70;
overflow: hidden;
}
.bottom-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.bottom-photo--left { left: 108px; border-radius: 49px; }
.bottom-photo--mid { left: 948px; }
.bottom-photo--right { left: 1781px; }
/* ─────────────────────────────────────────────────────────
레이어 4 — 상단 원형 뱃지 3개 (outer + inner + 2줄 텍스트)
각 뱃지: 396.024 × 397.468, top 0
───────────────────────────────────────────────────────── */
.badge { position: absolute; top: 0; width: 396.024px; height: 397.468px; }
.badge img.badge-outer {
position: absolute; inset: 0;
width: 100%; height: 100%; object-fit: cover; display: block;
}
.badge img.badge-inner {
position: absolute;
width: 301.829px; height: 302.93px;
object-fit: cover; display: block;
}
.badge--owner { left: 265.38px; }
.badge--owner .badge-inner { left: 47.6px; top: 53.88px; width: 300.816px; height: 302.93px; }
.badge--builder { left: 1092.88px; }
.badge--builder .badge-inner { left: 46.59px; top: 51.84px; width: 301.829px; height: 301.913px; }
.badge--designer { left: 1945.7px; }
.badge--designer .badge-inner { left: 47.6px; top: 59.98px; width: 300.816px; height: 302.93px; }
/* 뱃지 라벨 (2줄: 큰 글씨 65px / 작은 글씨 50px) */
.badge-label {
position: absolute;
width: 179.274px;
font-weight: 700;
text-align: center;
letter-spacing: -1.3px;
display: flex;
flex-direction: column;
justify-content: flex-start;
}
.badge-label .ln1 { font-size: 65px; line-height: 1; }
.badge-label .ln2 { font-size: 50px; line-height: 1.2; }
/* 발주자: center x = 464.4 (badge_left + 199), top 191.7 */
.badge-label--owner { left: 374.76px; top: 191.7px; height: 130.474px; color: #285b4a; }
/* 시공자 */
.badge-label--builder { left: 1202.27px; top: 191.7px; height: 130.474px; color: #445a2f; }
/* 설계자 (label width 179.274) — translate-x-1/2 left=2143.71 → left = 2054.07 */
.badge-label--designer { left: 2054.08px; top: 191.7px; width: 179.274px; height: 136.496px; color: #743002; }
.badge-label--designer .ln1 { line-height: 1.2; }
/* ─────────────────────────────────────────────────────────
레이어 5 — 본문 텍스트 3 컬럼 (font 40 medium)
───────────────────────────────────────────────────────── */
/* ─────────────────────────────────────────────────────────
본문 bullet 리스트 — 시맨틱: 커스텀 marker가 있는 list
각 .bullet-list 가 column, .bullet-row 가 list item.
.bullet-icon 은 marker (장식), .bullet-text 는 본문.
수학 (CSS 변수로 자동 도출):
icon_margin_top = lh/2 icon_h/2 = lh/2 16.265
→ 아이콘 vertical center를 텍스트 첫 줄 center에 align
icon_margin_right = text_left icon_left icon_w (Figma값)
───────────────────────────────────────────────────────── */
.bullet-list {
position: absolute;
display: flex;
flex-direction: column;
/* 핵심: 모든 컬럼 동일 top/bottom. 페어들이 컨테이너 안에서 균등 분포.
같은 height 기준으로 페어 간 spacing이 컬럼별로 다름 (적은 아이템 = 더 넓은 spacing) */
justify-content: space-between;
font-family: 'Noto Sans KR', sans-serif;
font-weight: 500;
font-size: 40px;
color: #000000;
/* Per-column 인라인: width, height, --icon-gap */
}
.bullet-row {
display: flex;
align-items: flex-start;
--lh: 85px; /* 기본 line-height — 모든 single-line row 균일 */
/* fixed height 없음. row 높이는 내용으로 결정 (1줄 = lh, 2줄 wrap = 2×lh).
wrap 되어도 다음 row가 자동 시프트 → overlap 없음 */
}
.bullet-row.compact {
--lh: 50px; /* 2-line item: 더 타이트한 lh, 자연 wrap으로 2줄 */
}
.bullet-icon {
flex: none;
width: 32.411px;
height: 32.529px;
/* 수학: 아이콘 center를 첫 줄 center에 align */
margin-top: calc(var(--lh) / 2 - 16.265px);
/* 수학: 컬럼별 Figma gap (text_left icon_left icon_w) */
margin-right: var(--icon-gap, 11px);
}
.bullet-icon img { width: 100%; height: 100%; object-fit: cover; display: block; }
.bullet-text {
flex: 1;
line-height: var(--lh);
/* wrap 허용: 텍스트가 컬럼 너비를 초과하면 자연 줄바꿈 */
white-space: normal;
word-break: keep-all; /* 한글: 단어 단위 줄바꿈 */
}
.body--owner { left: 171.18px; top: 421.58px; width: 643.423px; height: 750.343px; }
.body--builder { left: 1004.79px; top: 417.52px; width: 624.306px; height: 650.611px; }
.body--designer { left: 1842.01px; top: 417.52px; width: 664.695px; height: 750.343px; }
/* (체크박스는 페어 .bullet-icon으로 통합. standalone 클래스 제거) */
</style>
</head>
<body>
<div class="slide">
<div class="block">
<div class="inner">
<!-- 레이어 1: 3 컬럼 배경 (image 2977 × 3) -->
<div class="col-bg col-bg--left"><img src="assets/shared/4a17cd1dddaba8a220b706df3ec052d2bfde4f47.png" alt=""></div>
<div class="col-bg col-bg--mid"><img src="assets/shared/4a17cd1dddaba8a220b706df3ec052d2bfde4f47.png" alt=""></div>
<div class="col-bg col-bg--right"><img src="assets/shared/4a17cd1dddaba8a220b706df3ec052d2bfde4f47.png" alt=""></div>
<!-- 레이어 2: 컬러 오버레이 — CSS 단색 전환 -->
<div class="col-overlay col-overlay--left"></div>
<div class="col-overlay col-overlay--mid"></div>
<div class="col-overlay col-overlay--right"></div>
<!-- 레이어 3: 하단 사진 카드 (좌하 — image 3574) -->
<div class="bottom-photo bottom-photo--left"><img src="assets/shared/d2c070f200af83f563976b6b0f309d38321d204d.png" alt=""></div>
<!-- 레이어 4: 상단 원형 뱃지 3개 -->
<div class="badge badge--owner">
<img class="badge-outer" src="assets/shared/77f319979c880da34ff3d423fcd97827f636c01e.png" alt="">
<img class="badge-inner" src="assets/shared/e64c967dd00302bfbef6cfbcbb4f7a4db5d9d96c.png" alt="">
</div>
<div class="badge badge--builder">
<img class="badge-outer" src="assets/shared/1550ec755fa7922dcfc1c90135a570d6b9df82cc.png" alt="">
<img class="badge-inner" src="assets/shared/85beaf9dfc17b7ed4620729a086ba22143606517.png" alt="">
</div>
<div class="badge badge--designer">
<img class="badge-outer" src="assets/shared/9ac089fa9c5106b6b26d47727003641bb56ba4b0.png" alt="">
<img class="badge-inner" src="assets/shared/4b534ccf4e945fbe7436a0d8d96a6deffcfe5cef.png" alt="">
</div>
<!-- 뱃지 라벨 (별도 레이어) -->
<div class="badge-label badge-label--owner"><span class="ln1">발주자</span><span class="ln2">목표</span></div>
<div class="badge-label badge-label--builder"><span class="ln1">시공자</span><span class="ln2">목표</span></div>
<div class="badge-label badge-label--designer"><span class="ln1">설계자</span><span class="ln2">목표</span></div>
<!--
레이어 5: 본문 페어 (체크박스 + 텍스트) — flex 구조
템플릿화 준비: 각 row는 add/remove 가능, 텍스트 길이가 row 높이 결정
row의 height가 다음 row까지의 간격을 결정 (Figma 체크박스 y 차이 그대로)
-->
<!--
모든 row에 fixed height 없음. 자연 flex stacking.
single-line: lh 85 → row 85 tall (균일)
compact: lh 50 + 자연 wrap → row N×50 tall (텍스트 길이 결정)
wrap이 일어나도 next row가 자동으로 밀림 → overlap 없음
Letter-spacing은 Figma에서 wrap 방지를 위한 디자인 의도 (-0.8/-1.6 등)
→ 측정값 기반으로 약간 더 강하게 적용 (Chrome Noto Sans KR 너비 차이 보정)
-->
<!-- 발주자: list_left 127.63, list_w 686.97, icon_gap 11.14
top/height: 모든 컬럼 동일 (top 421.58, height 720) → bottom 1141.58 -->
<div class="bullet-list" style="left:127.63px;top:421.58px;width:686.97px;height:720px;--icon-gap:11.14px;">
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">민원, 재 작업 등의 예방 및 최소화</span>
</div>
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">직관화로 품질 향상 및 안정성 제고</span>
</div>
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text" style="letter-spacing:-1.5px;">수행공정의 쉬운이해로 관리 편의성 증진</span>
</div>
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">실무자와 발주자간의 소통 오류 최소화</span>
</div>
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">행정 자동화와 최소화로 생산성 향상</span>
</div>
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">건설정보의 통합관리로 활용성 강화</span>
</div>
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text" style="letter-spacing:-3.5px;">전 생애주기에 걸친 효율적 디지털 자산관리</span>
</div>
</div>
<!-- 시공자: list_left 961.20, list_w 667.90, icon_gap 11.18 (top/height 동일) -->
<div class="bullet-list" style="left:961.20px;top:421.58px;width:667.90px;height:720px;--icon-gap:11.18px;">
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text" style="letter-spacing:-1.5px;">시공 오류예방 및 공사 Risk 최소화</span>
</div>
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">시각화로 안전성 제고 및 품질 향상</span>
</div>
<div class="bullet-row compact">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">중간태, 완성태 측량을 통한<br>시‧공간적 관리 편리성 향상</span>
</div>
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">건설 관계자들 간의 의사소통 강화</span>
</div>
<div class="bullet-row compact">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">Model을 활용한 시공상세도 등의<br>관련도서 작성 용이</span>
</div>
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">System 구축을 통한 행정 간소화</span>
</div>
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">기술개발을 통한 생산성 향상</span>
</div>
</div>
<!-- 설계자: list_left 1794.78, list_w 711.93, icon_gap 14.82 (top/height 동일) -->
<div class="bullet-list" style="left:1794.78px;top:421.58px;width:711.93px;height:720px;--icon-gap:14.82px;">
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">직관적 시각화로 원활한 소통</span>
</div>
<div class="bullet-row compact">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">3D 모델 활용으로 오류 최소화 및<br>Claim 예방</span>
</div>
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">발주자와의 상호 신뢰 증진</span>
</div>
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">정보물 생산으로 부가가치 창출</span>
</div>
<div class="bullet-row">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">고부가가치 창출산업으로 전환</span>
</div>
<div class="bullet-row compact">
<span class="bullet-icon"><img src="assets/shared/6896d5c231e51de7cb844b99905e40b846863cd5.png" alt=""></span>
<span class="bullet-text">프로젝트 정보의 일관성 유지 및<br>관리를 통한 오류 최소화</span>
</div>
</div>
<!-- 체크박스는 페어 내부 .bullet-icon으로 통합됨 (이전 standalone 21개 제거) -->
<!-- 하단 사진 (중/우) — 레이어 순서상 마지막 -->
<div class="bottom-photo bottom-photo--mid"><img src="assets/shared/2a6a58e7bf7a645b5ede65115feb2890ccc414d1.png" alt=""></div>
<div class="bottom-photo bottom-photo--right"><img src="assets/shared/39113493f6e3ae76d766e86e293b0f0dcbf55d91.png" alt=""></div>
</div>
</div>
</div>
</body>
</html>