# Phase Z Display Strategy Catalog # # User lock (2026-05-07) — Step 8-A: # Display strategy vocabulary — how to present content within a region. # Source: docs/architecture/PHASE-Z-CONTENT-OBJECT-SUBZONE-SPEC.md (4 entry). # # Axis separation: # region_layouts.yaml = how to divide zone into regions (structure axis) # display_strategies.yaml (this file) = how to display content within region (policy axis) # The two axes are orthogonal — same region layout can use different strategies. # # Absolute user locks (must NOT be violated): # - Original text/table/image/details content is NEVER dropped or summarized. # - 오답노트 #5: 텍스트 압축 / trim / restructure 금지. # - IMPROVEMENT-REDESIGN.md line 110: "본문은 preview, 원문은 popup/detail 무손실 보존". # - "dropped" applies ONLY to decorative elements — strict forbidden_for enforcement. # # Per-entry fields: # description: str # applies_to: list[str] (content types that can use this strategy) # forbidden_for: list[str] (content types that MUST NOT use this strategy) # preserves_original: bool (true = original content kept somewhere — popup/detail) # preview_chars: int | null (IMP-35 u9 — soft char budget for the inline body # shown alongside the popup trigger; null when the # strategy has no popup. The popup body itself # ALWAYS holds the FULL original — preview_chars # governs only the inline preview/summary surface.) # popup_target_slot: str | null # (IMP-35 u9 — frame Layer B slot identifier the # popup trigger anchors to. null when the strategy # has no popup. See CLAUDE.md "위계 + 용어" → # "Frame Slot" / "Layer B" for the slot vocabulary.) inline_full: description: Content fully inline — entire content rendered within region. applies_to: [text_block, table, image, details, decorative_element] forbidden_for: [] preserves_original: true # all content is inline, original = inline # IMP-35 u9 — inline_full has no popup → both popup-wiring fields are null. preview_chars: null popup_target_slot: null inline_preview_with_details: description: Partial inline preview + remaining content in details/popup. applies_to: [text_block, table, details] forbidden_for: [decorative_element] preserves_original: true # User lock — original content kept in popup # IMP-35 u9 — partial preview body inline; popup body holds FULL original. preview_chars: 240 popup_target_slot: primary detail_trigger: placement: top-right # 본문 흐름 방해 X / 보조 동작 위치 / 안정 (user 2026-05-07) label: details # identifier — display text 는 partial/UI 별 axis preserves_original_note: "버튼은 원문 대체 X — 원문 전체 진입문" details_only: description: Summary inline only, full content in popup. applies_to: [text_block, table, details] forbidden_for: [decorative_element] preserves_original: true # User lock — full content in popup # IMP-35 u9 — summary-only inline surface (smaller char budget); popup body # holds FULL original. preview_chars > 0 because details_only still emits a # short summary line — it is NOT a "no body" surface (that is `dropped`). preview_chars: 80 popup_target_slot: primary detail_trigger: placement: top-right # user lock — popup 진입 일관 위치 label: details preserves_original_note: "버튼은 원문 대체 X — 원문 전체 진입문" dropped: description: | Decorative element omitted due to space constraints. USER LOCK: applies ONLY to decorative_element. NEVER drop text_block / table / image / details — original content preservation is absolute (오답노트 #5, IMPROVEMENT-REDESIGN.md §3.6 line 110). applies_to: [decorative_element] forbidden_for: [text_block, table, image, details] preserves_original: false # decorative only — no original to preserve # IMP-35 u9 — dropped has no popup and no body surface → both fields null. preview_chars: null popup_target_slot: null