How APB relocates a parent in the theme DOM, which locators work, and what hides forever.

APB-DOCS-PLACE

Field field_apb_target_placement points at vocabulary apb_tax_target_placement. The term — not the paragraph — carries field_apb_tx_container_locator and field_apb_tx_insert_method. Components must not implement placement themselves. apb-placement.js is the only implementation.

How a move happens

Preprocess emits JSON on data-apb-target-placement, for example {"name":"presentation_region","container_locator":"#presentation-region","insert_method":"appendTo"}. If container_locator is non-empty and the name is not current_position, preprocess also sets data-apb-placement-pending. CSS hides pending paragraphs with display:none !important until the move succeeds.

Placement runs once on setTimeout(0). There is no retry. Missing locators leave the paragraph hidden. Server HTML still contains pending attributes; that is expected until JS runs.

Locator matrix (apbuilder_theme)

Labelmachine_nameLocatorMethodWorks?
Bodycurrent_position(empty)stayYes — default
Top regionpresentation_region#presentation-regionappendToYes. Hides #page-title. Two parents keep field order.
Main Content Topmain_content_top#apb-main-contentprependToYes. Two parents reverse field order.
Main Content Bottommain_content_bottom#apb-main-contentappendToYes.
Main Content - No containermain_content_no_container#main-content-no-containerappendToYes. Outside #apb-main-content.
Sidebar Top / Bottomsidebar_top / sidebar_bottom#sidebar-top / #sidebar-bottomappendToNo on this theme unless sidebar_first has a block. Twig prints those IDs only inside that region. Parents hide forever.
Internal Placement 1–3internal_placement_13#internal-placement-NprependToConditional. Emit the id with a simple-content region item titled exactly internal-placement-N, Active Region on, earlier in the field than the consumer. A late region stays pending (one-pass). Duplicate HTML ids are invalid.

Overlay Content has no placement field and always stays in the host field.

WOW fade-in does not follow relocated parents

The orchestrator adds wow animate__fadeIn to field items and no-container paragraphs, then inits WOW, then placement moves the inner paragraph. Top region, main-content top/bottom, sidebars, and internal drop zones do not get the animation on the moved node. Empty field__item wrappers can remain in the field.