# Phase B: 누락 기능 구현 — 실행 상세 > 누락된 기능 구현. 실작업 5개 (B-6, B-7은 해결됨). > 원칙: 하드코딩 금지. 모든 판단은 AI 사고. 회귀 금지. --- ## 실행 순서 ``` [독립] B-1 (details 템플릿), B-4+B-5 (이미지/표 판단), B-8 (fallback 교체) → B-2 (인쇄 JS, B-1 후) → B-3 (catalog 등록, B-1 후) ``` --- ## B-1: details-block 템플릿 제작 ✅ 완료 ### 현재 상태 - BLOCK_SLOTS에 정의 있음 (design_director.py:47~49): `required: ["summary_text", "detail_content"], optional: ["label"]` - _apply_defaults에 기본값 있음 (content_editor.py:248): `{"summary_text": "(상세 내용)", "detail_content": ""}` - **HTML 템플릿 파일이 templates/blocks/ 어디에도 없음** → 렌더링 불가 ### API 선택 - AI 호출 없음. HTML/CSS 템플릿만. ### 작업 `templates/blocks/emphasis/details-block.html` 신규 제작 **구조:** ```html
{% if label %}{{ label }}{% endif %} {{ summary_text }}
{{ detail_content }}
``` ### 하드코딩 점검 — CSS 규칙 - 색상: `var(--color-*)` 만 사용. `#직접값` 금지 - 폰트: `var(--font-*)` 사용 - 여백: `var(--spacing-*)` 사용 - 테두리: `var(--border-width)`, `var(--accent-border)`, `var(--radius)` 사용 - **기존 emphasis 블록의 직접값(#1e3a5f 등)을 따라하지 않는다** ### 충돌/회귀 - 충돌: 없음. 신규 파일 추가만 - 회귀: 없음. BLOCK_SLOTS/_apply_defaults와 정합 - 단발성: 아님. `
/`는 HTML 표준 — 브라우저 내장, 의존성 없음 ### 수정 파일 - 신규: `templates/blocks/emphasis/details-block.html` ### 구현 결과 - `templates/blocks/emphasis/details-block.html` 신규 제작 완료 - HTML 구조: `
` → `` (label + summary_text) → `
` (detail_content) - CSS: **`#직접값` 0개** — 전부 디자인 토큰으로 구현 - 배경: `var(--color-bg-subtle)`, 테두리: `var(--color-border)`, 액센트: `var(--color-accent)` - 폰트: `var(--font-body)`, `var(--font-caption)`, 여백: `var(--spacing-inner)`, `var(--spacing-block)` - summary 마커: 기본 브라우저 마커 숨기고(`list-style: none`, `::-webkit-details-marker { display: none }`) 커스텀 ▶/▼ 표시 - 좌측 파란 액센트 라인: `border-left: var(--accent-border) solid var(--color-accent)` — quote-left-border와 톤 통일 --- ## B-2: 인쇄 시 details 자동 펼침 JS ✅ 완료 ### 현재 상태 - slide-base.html의 `@media print`에 page-break만 있음 - details 자동 펼침 JS 없음 - CLAUDE.md: "인쇄 시 JavaScript 6줄로 자동 펼침" ### 작업 slide-base.html `` 직전에 삽입: ```html ``` ### 하드코딩 점검 - 없음. DOM API만 사용. 고정값 없음. ### 충돌/회귀 - 충돌: 없음. `{% endfor %}` 이후, Jinja2 루프 밖에 삽입 - 회귀: 없음. 기존 HTML에 `
` 없으면 querySelectorAll이 빈 NodeList → 무동작 - 다운로드 HTML: renderer.py의 CSS 인라인 삽입은 `` → `