# Phase Z Region Layout Catalog (Internal Region structure) # # User lock (2026-05-07) — Step 8-A: # Internal Region (= child zone) layout vocabulary catalog. # Source: docs/architecture/PHASE-Z-CONTENT-OBJECT-SUBZONE-SPEC.md §2.5 (v1, 6 entry). # Code connection (2026-05-08, Step 8-conn): # src/phase_z2_composition.py::load_region_layouts() reads this file. # src/phase_z2_pipeline.py step08 artifact records select_region_layout_candidates() output # per zone (placeholder signals: region_count=1, Step 3/4 부재 종속). # Step 9 v0 (application_plan) consumes the candidate list per unit. # # Hierarchy: # Slide -> Layout (slide-body zone 분배) # -> Zone -> Internal Region (this catalog) -> Frame -> Frame Slot -> Content # # Decision rule (SPEC §2.5 deterministic, AI X): # 1. region_count == 1 -> region-single # 2. details_presence == true / large content -> region-preview-details # 3. region_count == 4 AND 4 equal items -> region-grid-2x2 # 4. region_count == 2 AND primary+supporting + ratio -> region-main-support # 5. region_count == 2 AND visual element (image/diagram)-> region-horizontal-split # 6. fallback -> region-vertical-stack # # Per-entry fields: # region_count: int | str (e.g. 1, 2, 4, "2+") # topology: vertical | horizontal | grid | weighted | preview-details | single # default_fallback: bool (true only for region-vertical-stack — SPEC §2.5) # description: str # candidate_when: dict (decision rule signals — Step 8-B input) region-single: region_count: 1 topology: single default_fallback: false description: 1 region (zone entire = single region) candidate_when: region_count: 1 region-vertical-stack: region_count: "2+" topology: vertical default_fallback: true description: Vertical top-bottom stack. Default fallback when no other rule matches. candidate_when: region_count_ge: 2 flow_type: sequential region-horizontal-split: region_count: 2 topology: horizontal default_fallback: false description: Left-right horizontal split (text + image, text + diagram). candidate_when: region_count: 2 has_visual_element: true # image / diagram in content_type_mix region-main-support: region_count: 2 topology: weighted default_fallback: false description: Main region + supporting region (asymmetric ratio, e.g. 0.7 / 0.3). ratios_default: [0.7, 0.3] candidate_when: region_count: 2 role_pattern: primary_supporting ratio_asymmetric: true # max / min >= 2 region-preview-details: region_count: 2 topology: preview-details default_fallback: false description: Inline preview region + details/popup region. # preserves_original 은 display_strategies.yaml 의 책임 (axis 분리 lock 2026-05-07). # User lock (원문 무손실 보존) 은 display_strategies 의 inline_preview_with_details # / details_only 의 preserves_original: true 로 single source of truth 박힘. candidate_when: or: - details_presence: true - large_table: ">= 5 rows" - long_text: true region-grid-2x2: region_count: 4 topology: grid default_fallback: false description: 2x2 grid (4 equal regions). candidate_when: region_count: 4 flow_type: parallel_4