fix(catalog): track promoted family partials required by 13-family baseline
Some checks failed
Multi-MDX Regression (IMP-91) / multi-mdx-regression (push) Failing after 20s
Some checks failed
Multi-MDX Regression (IMP-91) / multi-mdx-regression (push) Failing after 20s
app_sw_package_vs_solution.html + pre_construction_model_info_stacked.html were staged as new files but missing from prior commits. catalog frame_contracts.yaml already references both (family=table / family=list); this commit reconciles the on-disk partials with the registry so the 13-family baseline matches `git ls-tree` after a clean checkout. No marker work (data-region-id / data-content-unit-id) — that axis stays with the marker-injection issue. Disjoint from family/variant architecture refactor (별 tracking issue).
This commit is contained in:
242
templates/phase_z2/families/app_sw_package_vs_solution.html
Normal file
242
templates/phase_z2/families/app_sw_package_vs_solution.html
Normal file
@@ -0,0 +1,242 @@
|
|||||||
|
<!-- Phase Z-2 MVP-1.5b frame-derived adapted block. -->
|
||||||
|
{#
|
||||||
|
─────────────────────────────────────────────────────────────────────────────
|
||||||
|
Visual Provenance — figma_to_html_agent/blocks/1171281203/ (frame 23)
|
||||||
|
─────────────────────────────────────────────────────────────────────────────
|
||||||
|
Frame 23 = "Application S/W 의 구분".
|
||||||
|
구조 (figma 1:1) :
|
||||||
|
① title gradient (Application S/W = orange→brown, 의 구분 = green→black)
|
||||||
|
② CSS Grid table (label col + col_a + col_b)
|
||||||
|
③ header row :
|
||||||
|
- col 1 (label) = teal #589e8d
|
||||||
|
- col 2 (Package) = teal #589e8d
|
||||||
|
- col 3 (Solution) = orange #ef7a26
|
||||||
|
④ N data rows : zebra (odd 흰 0.85 / even peach rgba(253,198,158,0.2))
|
||||||
|
- 각 row : 좌측 label cell + 좌 data + 우 data
|
||||||
|
- cell border : 1.5px solid #888
|
||||||
|
⑤ bullet (•) + accent (.hl orange #a14101, .big 50px 강조)
|
||||||
|
|
||||||
|
slots (bim_dx_comparison_table 와 동일 — builder = process_product_pair) :
|
||||||
|
- title : section.title (zone 중목차)
|
||||||
|
- col_a_label / col_b_label : h3 title (Package / Solution 또는 mdx h3 title)
|
||||||
|
- col_a_body.sections[].title : subsection title (= row label)
|
||||||
|
- col_a_body.sections[].text_lines / transforms
|
||||||
|
- col_b_body : same
|
||||||
|
|
||||||
|
Axis A+B fit — container query (cqh) + jinja line count 산식.
|
||||||
|
─────────────────────────────────────────────────────────────────────────────
|
||||||
|
#}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.f23b {
|
||||||
|
width: 100%; height: 100%;
|
||||||
|
display: flex; flex-direction: column;
|
||||||
|
gap: 4px;
|
||||||
|
font-family: 'Noto Sans KR', 'Pretendard', sans-serif;
|
||||||
|
word-break: keep-all;
|
||||||
|
container-type: size;
|
||||||
|
container-name: f23b-root;
|
||||||
|
}
|
||||||
|
/* 중목차 (zone title) — gradient 보존, 사용자 룰 (미변경). */
|
||||||
|
.f23b__title {
|
||||||
|
font-size: var(--font-zone-title);
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: var(--lh-zone-title);
|
||||||
|
background-image: linear-gradient(180deg, #000 0%, #883700 100%);
|
||||||
|
-webkit-background-clip: text; background-clip: text;
|
||||||
|
color: transparent;
|
||||||
|
flex-shrink: 0;
|
||||||
|
filter: drop-shadow(0 0 3px rgba(50,44,30,0.4));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* CSS Grid table — 사용자 lock 2026-05-15 : 의미 없는 label col (구분/숫자)
|
||||||
|
제거, 2 col 로 전체 폭 활용. */
|
||||||
|
.f23b__tbl {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr;
|
||||||
|
grid-auto-rows: minmax(0, auto);
|
||||||
|
flex: 1 1 auto;
|
||||||
|
min-height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
border-radius: clamp(4px, 1cqh, 8px);
|
||||||
|
border: 1px solid #888;
|
||||||
|
}
|
||||||
|
/* 회전 비활성 — 사용자 lock 2026-05-15 : 03-2 는 2 col table 유지. */
|
||||||
|
|
||||||
|
/* header row */
|
||||||
|
.f23b__th {
|
||||||
|
padding: clamp(4px, 1.5cqh, 10px) clamp(4px, 1cqw, 8px);
|
||||||
|
display: flex; align-items: center; justify-content: center;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: var(--font-sub-title);
|
||||||
|
line-height: 1.15;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
letter-spacing: -0.03em;
|
||||||
|
border-right: 1px solid #888;
|
||||||
|
}
|
||||||
|
.f23b__th:last-child { border-right: none; }
|
||||||
|
.f23b__th--label,
|
||||||
|
.f23b__th--a { background: #589e8d; } /* figma teal */
|
||||||
|
.f23b__th--b { background: #ef7a26; } /* figma orange */
|
||||||
|
|
||||||
|
/* data row cells */
|
||||||
|
.f23b__td {
|
||||||
|
padding: clamp(4px, 1.2cqh, 10px) clamp(4px, 1cqw, 10px);
|
||||||
|
border-top: 1px solid #888;
|
||||||
|
border-right: 1px solid #888;
|
||||||
|
color: #000;
|
||||||
|
font-size: var(--font-body);
|
||||||
|
line-height: clamp(1.2em, calc(70cqh / var(--max-body-lines, 6)), 1.6em);
|
||||||
|
font-weight: 500;
|
||||||
|
overflow: hidden;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
.f23b__td:last-child { border-right: none; }
|
||||||
|
.f23b__td--label {
|
||||||
|
font-weight: 700;
|
||||||
|
text-align: center;
|
||||||
|
display: flex; align-items: center; justify-content: center;
|
||||||
|
font-size: var(--font-sub-title);
|
||||||
|
line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* zebra — 첫 번째 data row 가 row N, 두 번째 row 가 N+1 ... */
|
||||||
|
.f23b__row--odd .f23b__td { background: rgba(255,255,255,0.85); }
|
||||||
|
.f23b__row--even .f23b__td { background: rgba(253,198,158,0.2); }
|
||||||
|
|
||||||
|
/* bullet + accent */
|
||||||
|
.f23b__td .text-line {
|
||||||
|
position: relative;
|
||||||
|
padding-left: clamp(12px, 2cqw, 18px);
|
||||||
|
}
|
||||||
|
.f23b__td .text-line::before {
|
||||||
|
content: "•";
|
||||||
|
position: absolute;
|
||||||
|
left: clamp(2px, 0.5cqw, 6px); top: 0;
|
||||||
|
color: #555;
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
.f23b__td .text-line strong { font-weight: 700; color: #a14101; } /* figma .hl */
|
||||||
|
.f23b__td .accent { font-weight: 700; color: #a14101; }
|
||||||
|
.f23b__td .text-line--sub { padding-left: clamp(20px, 4cqw, 28px); color: #444; }
|
||||||
|
.f23b__td .text-line--sub::before {
|
||||||
|
content: "\25B8"; /* ▸ */
|
||||||
|
left: clamp(8px, 1.5cqw, 14px);
|
||||||
|
color: #888;
|
||||||
|
font-size: 0.85em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* AS-IS/TO-BE mini transforms (콘텐츠 무손실 + 내용 기반 폭). 사용자 lock
|
||||||
|
2026-05-15 : 표 안 내용이 좌측정렬 환경이라 mini table 도 좌측 정렬.
|
||||||
|
cell 안 텍스트는 그대로 center align. */
|
||||||
|
.f23b__transforms {
|
||||||
|
display: table;
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: auto;
|
||||||
|
border-collapse: separate;
|
||||||
|
border-spacing: 6px 1px;
|
||||||
|
font-size: 0.95em;
|
||||||
|
}
|
||||||
|
.f23b__transforms-head,
|
||||||
|
.f23b__transforms-row { display: table-row; }
|
||||||
|
.f23b__transforms-head > * {
|
||||||
|
display: table-cell;
|
||||||
|
text-align: center;
|
||||||
|
font-weight: 900;
|
||||||
|
font-size: 0.85em;
|
||||||
|
color: #6b4423;
|
||||||
|
padding: 0 4px 1px;
|
||||||
|
border-bottom: 1px solid rgba(107,68,35,0.3);
|
||||||
|
}
|
||||||
|
.f23b__transforms-cell,
|
||||||
|
.f23b__transforms-arrow {
|
||||||
|
display: table-cell;
|
||||||
|
text-align: center;
|
||||||
|
padding: 1px 6px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
.f23b__transforms-cell { color: #1a1a1a; font-weight: 500; }
|
||||||
|
.f23b__transforms-cell--to { color: #a14101; font-weight: 700; }
|
||||||
|
.f23b__transforms-arrow { font-weight: 700; color: #9c6f3f; }
|
||||||
|
|
||||||
|
/* row title (subsection label) — figma 의 좌측 td-label 같은 row-bound label */
|
||||||
|
.f23b__item-title {
|
||||||
|
font-weight: 900;
|
||||||
|
color: #6b4423;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
font-size: 0.95em;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="f23b" data-frame-id="1171281203" data-template-id="app_sw_package_vs_solution">
|
||||||
|
|
||||||
|
<div class="f23b__title">{{ slot_payload.title }}</div>
|
||||||
|
|
||||||
|
<div class="f23b__tbl">
|
||||||
|
{# header row — 2 col (label col 제거, 사용자 lock 2026-05-15) #}
|
||||||
|
<div class="f23b__th f23b__th--a">{{ slot_payload.col_a_label | safe }}</div>
|
||||||
|
<div class="f23b__th f23b__th--b">{{ slot_payload.col_b_label | safe }}</div>
|
||||||
|
|
||||||
|
{# data rows — col_a_body.sections 와 col_b_body.sections 를 row 별 페어 #}
|
||||||
|
{% set a_secs = slot_payload.col_a_body.sections or [] %}
|
||||||
|
{% set b_secs = slot_payload.col_b_body.sections or [] %}
|
||||||
|
{% set row_count = [a_secs | length, b_secs | length] | max %}
|
||||||
|
{% for i in range(row_count) %}
|
||||||
|
{% set a = a_secs[i] if i < (a_secs | length) else none %}
|
||||||
|
{% set b = b_secs[i] if i < (b_secs | length) else none %}
|
||||||
|
{% set row_class = 'f23b__row--' ~ ('odd' if loop.index0 % 2 == 0 else 'even') %}
|
||||||
|
|
||||||
|
{# col_a cell #}
|
||||||
|
<div class="f23b__td {{ row_class }}" style="--max-body-lines: {{ (a.text_lines | length if a and a.text_lines else 1) + (a.transforms | length if a and a.transforms else 0) }};">
|
||||||
|
{% if a %}
|
||||||
|
{% if a.title %}<div class="f23b__item-title">{{ a.title | safe }}</div>{% endif %}
|
||||||
|
{% if a.transforms %}
|
||||||
|
<div class="f23b__transforms">
|
||||||
|
<div class="f23b__transforms-head">
|
||||||
|
<span class="f23b__transforms-from">AS-IS</span>
|
||||||
|
<span></span>
|
||||||
|
<span class="f23b__transforms-to">TO-BE</span>
|
||||||
|
</div>
|
||||||
|
{% for t in a.transforms %}
|
||||||
|
<div class="f23b__transforms-row">
|
||||||
|
<div class="f23b__transforms-cell f23b__transforms-cell--from">{{ t.from | safe }}</div>
|
||||||
|
<div class="f23b__transforms-arrow">➜</div>
|
||||||
|
<div class="f23b__transforms-cell f23b__transforms-cell--to">{{ t.to | safe }}</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% elif a.text_lines %}
|
||||||
|
{% for line in a.text_lines %}<div class="text-line{% if line.indent and line.indent > 0 %} text-line--sub{% endif %}">{{ line.text | safe }}</div>{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{# col_b cell #}
|
||||||
|
<div class="f23b__td {{ row_class }}" style="--max-body-lines: {{ (b.text_lines | length if b and b.text_lines else 1) + (b.transforms | length if b and b.transforms else 0) }};">
|
||||||
|
{% if b %}
|
||||||
|
{% if b.title %}<div class="f23b__item-title">{{ b.title | safe }}</div>{% endif %}
|
||||||
|
{% if b.transforms %}
|
||||||
|
<div class="f23b__transforms">
|
||||||
|
<div class="f23b__transforms-head">
|
||||||
|
<span class="f23b__transforms-from">AS-IS</span>
|
||||||
|
<span></span>
|
||||||
|
<span class="f23b__transforms-to">TO-BE</span>
|
||||||
|
</div>
|
||||||
|
{% for t in b.transforms %}
|
||||||
|
<div class="f23b__transforms-row">
|
||||||
|
<div class="f23b__transforms-cell f23b__transforms-cell--from">{{ t.from | safe }}</div>
|
||||||
|
<div class="f23b__transforms-arrow">➜</div>
|
||||||
|
<div class="f23b__transforms-cell f23b__transforms-cell--to">{{ t.to | safe }}</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% elif b.text_lines %}
|
||||||
|
{% for line in b.text_lines %}<div class="text-line{% if line.indent and line.indent > 0 %} text-line--sub{% endif %}">{{ line.text | safe }}</div>{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,194 @@
|
|||||||
|
<!-- Phase Z-2 신규 frame partial — Frame 9 (1171281180) pre_construction_model_info_stacked.
|
||||||
|
2026-05-14 — V4 04-1 top rank-1 매칭 (의미 conf=0.722) + structure cardinality 5 일치.
|
||||||
|
사용자 룰 부합 : Figma visual (계단 pill / 5 색상 / vertical label) 유지 + 콘텐츠 cardinality
|
||||||
|
에 맞춰 보완 (pill 안 1 라인 → multi-line: pill_N_label + pill_N_body). -->
|
||||||
|
{#
|
||||||
|
─────────────────────────────────────────────────────────────────────────────
|
||||||
|
Visual Provenance — figma_to_html_agent/blocks/1171281180/index.html
|
||||||
|
─────────────────────────────────────────────────────────────────────────────
|
||||||
|
PROMOTED (Figma 1:1):
|
||||||
|
- title-bar background : #fbd5b9 (line 43) + box-shadow
|
||||||
|
- title text gradient : #cc5200 (line 128) 강조부
|
||||||
|
- vertical label color : #144838 (line 68) + text-shadow drop
|
||||||
|
- pill background : rgba(255,255,255,0.5) (line 88)
|
||||||
|
- pill border-radius : 30px (line 89)
|
||||||
|
- pill box-shadow : 2px 4px 5px rgba(0,0,0,0.5) (line 90)
|
||||||
|
- 5 pill border-bottom 색상 (line 141, 147, 153, 159, 165):
|
||||||
|
1: #fb5915, 2: #e79000, 3: #e9a804, 4: #919f00, 5: #0d6361
|
||||||
|
|
||||||
|
ADAPTED (zone flex 재구성):
|
||||||
|
- 1153×592 absolute → flex column layout
|
||||||
|
- pill height 70px hardcode → dynamic (콘텐츠 양에 따라 auto)
|
||||||
|
- 계단 배치 (width/margin-left hardcode) → 가운데 정렬 + width 100%
|
||||||
|
(계단은 1 라인 짧은 텍스트 전제, multi-line 콘텐츠엔 부적합)
|
||||||
|
- 1 pill 1 라인 → pill_N_label (title) + pill_N_body (text_lines)
|
||||||
|
(사용자 룰 = frame 구조를 콘텐츠에 맞춰 보완)
|
||||||
|
|
||||||
|
NOT PROMOTED:
|
||||||
|
- 좌측 arc-deco SVG (장식 — 공간 절약 위해 단순화)
|
||||||
|
- arrow PNG (CSS triangle 대체 가능, 일단 ▶ 문자 사용)
|
||||||
|
|
||||||
|
slots : title + pill_N_label / pill_N_body (N = 1.._slot_count) — dynamic.
|
||||||
|
#}
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.f9b {
|
||||||
|
width: 100%; height: 100%;
|
||||||
|
display: flex; flex-direction: column;
|
||||||
|
gap: 6px;
|
||||||
|
font-family: 'Noto Sans KR', 'Pretendard', sans-serif;
|
||||||
|
word-break: keep-all;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 2026-05-14 — title 스타일 통일 (frame 29 process_product_two_way 와 동일 패턴) :
|
||||||
|
배경 box + box-shadow 제거, gradient 텍스트 만 유지. 사용자 룰 Q1. */
|
||||||
|
.f9b__title {
|
||||||
|
font-size: var(--font-zone-title);
|
||||||
|
font-weight: 700;
|
||||||
|
line-height: var(--lh-zone-title);
|
||||||
|
background-image: linear-gradient(180deg, #000 0%, #883700 100%);
|
||||||
|
-webkit-background-clip: text; background-clip: text;
|
||||||
|
color: transparent;
|
||||||
|
flex-shrink: 0;
|
||||||
|
padding-left: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.f9b__body {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
gap: 8px;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 좌측 vertical label — 콘텐츠 있을 때만 표시 */
|
||||||
|
.f9b__vlabel {
|
||||||
|
flex: 0 0 auto;
|
||||||
|
width: 56px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: var(--font-sub-title);
|
||||||
|
line-height: 1.2;
|
||||||
|
color: #144838;
|
||||||
|
text-align: center;
|
||||||
|
writing-mode: vertical-rl;
|
||||||
|
text-orientation: upright;
|
||||||
|
text-shadow: 0 2px 2px rgba(0,0,0,0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 2026-05-14 — pill 배치 vertical → horizontal (grid). 5 pills 를 가로로 나열 →
|
||||||
|
우측 공란 활용 + 세로 공간 절약. auto-fit + minmax 으로 N 동적.
|
||||||
|
gap 넓찍 (사용자 lock 2026-05-14). */
|
||||||
|
.f9b__pill-rows {
|
||||||
|
flex: 1;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
|
||||||
|
gap: 10px;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 2026-05-14 — bullet 줄간격 1/3 으로 압축 + 다른 간격 (padding, label↔body) 살짝 늘림. */
|
||||||
|
.f9b__pill {
|
||||||
|
min-height: 0;
|
||||||
|
background: rgba(255,255,255,0.7);
|
||||||
|
border-radius: 10px;
|
||||||
|
border-bottom: 3px solid;
|
||||||
|
box-shadow: 1px 2px 4px rgba(0,0,0,0.15);
|
||||||
|
padding: 8px 12px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 5px;
|
||||||
|
overflow: hidden;
|
||||||
|
align-self: start;
|
||||||
|
}
|
||||||
|
/* Figma frame 9 의 5 색상 — nth-child cycle. N>5 면 default border-bottom 색 (회색). */
|
||||||
|
.f9b__pill:nth-child(5n+1) { border-bottom-color: #fb5915; }
|
||||||
|
.f9b__pill:nth-child(5n+2) { border-bottom-color: #e79000; }
|
||||||
|
.f9b__pill:nth-child(5n+3) { border-bottom-color: #e9a804; }
|
||||||
|
.f9b__pill:nth-child(5n+4) { border-bottom-color: #919f00; }
|
||||||
|
.f9b__pill:nth-child(5n) { border-bottom-color: #0d6361; }
|
||||||
|
|
||||||
|
.f9b__pill-label {
|
||||||
|
font-size: var(--font-sub-title);
|
||||||
|
font-weight: 900;
|
||||||
|
line-height: 1.2;
|
||||||
|
color: #144838;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
}
|
||||||
|
/* arrow indicator — Figma frame 9 의 좌측 화살표 (▶) approximation */
|
||||||
|
.f9b__pill-label::before {
|
||||||
|
content: "▶";
|
||||||
|
flex-shrink: 0;
|
||||||
|
color: currentColor;
|
||||||
|
font-size: 0.85em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 2026-05-14 — bullet 줄간격 1/3 으로 압축 : line-height 1.3 → 1.05 (약 1/3 감소).
|
||||||
|
bullet 간 gap 2 → 1 로 더 압축. 가독성 임계 (한 bullet 안 line wrap 시 라인 겹침 직전). */
|
||||||
|
.f9b__pill-body {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
overflow: hidden;
|
||||||
|
min-height: 0;
|
||||||
|
color: #0c271e;
|
||||||
|
font-size: var(--font-body);
|
||||||
|
line-height: 1.05;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 첫 line = 인용구 (italic + 무 마커) — 04-1 의 따옴표 인용구 패턴 */
|
||||||
|
.f9b__pill-body .text-line:first-child {
|
||||||
|
font-style: italic;
|
||||||
|
color: #5C3714;
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
/* 이후 lines = 각 이슈 bullet (▪ 마커로 구분 강화) */
|
||||||
|
.f9b__pill-body .text-line:not(:first-child) {
|
||||||
|
position: relative;
|
||||||
|
padding-left: 12px;
|
||||||
|
}
|
||||||
|
.f9b__pill-body .text-line:not(:first-child)::before {
|
||||||
|
content: "▪";
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
color: #919f00;
|
||||||
|
font-size: 0.9em;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div class="f9b" data-frame-id="1171281180" data-template-id="pre_construction_model_info_stacked">
|
||||||
|
<div class="f9b__title">{{ slot_payload.title }}</div>
|
||||||
|
<div class="f9b__body">
|
||||||
|
{# vertical label — slot_payload.vlabel 있을 때만 표시 (현재 v0 미사용) #}
|
||||||
|
{% if slot_payload.vlabel %}
|
||||||
|
<div class="f9b__vlabel">{{ slot_payload.vlabel | safe }}</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<div class="f9b__pill-rows">
|
||||||
|
{% set slot_count = slot_payload._slot_count or 5 %}
|
||||||
|
{% for n in range(1, slot_count + 1) %}
|
||||||
|
{% set label = slot_payload['pill_' ~ n ~ '_label'] %}
|
||||||
|
{% set body = slot_payload['pill_' ~ n ~ '_body'] %}
|
||||||
|
{% if label or body %}
|
||||||
|
<div class="f9b__pill" data-frame-slot-id="pill_dynamic" data-pill-n="{{ n }}">
|
||||||
|
{% if label %}
|
||||||
|
<div class="f9b__pill-label">{{ label | safe }}</div>
|
||||||
|
{% endif %}
|
||||||
|
{% if body %}
|
||||||
|
<div class="f9b__pill-body">
|
||||||
|
{% for line in body %}<div class="text-line{% if line.indent and line.indent > 0 %} text-line--indent-{{ line.indent }}{% endif %}">{{ line.text | safe }}</div>{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
Reference in New Issue
Block a user