{# ── 1. HERO ─────────────────────────────────────────────────── #}
{% if heroBlock %}
{% partial 'blocks/parallax-hero-block' block=heroBlock index=heroBlock.id isMainHeading=true %}
{% endif %}
{# ── 2. STICKY STRIPS — services · areas · post ──────────────── #}
{# All three as direct children of .builder-page so position:sticky
pins them for the full page scope. No JS, no animation. #}
{% if servicesStripBlock %}
{% partial 'blocks/category-strip-block' block=servicesStripBlock index=servicesStripBlock.id %}
{% endif %}
{% if areasStripBlock %}
{% endif %}
{# ── 3. CONTENT AREA ──────────────────────────────────────────── #}
{# /.builder-page.home-page #}
{% else %}
{% if servicesListBlock %}
{% partial 'blocks/section-list-block' block=servicesListBlock index=servicesListBlock.id %}
{% endif %}
{% if areasListBlock %}
{% partial 'blocks/section-list-block' block=areasListBlock index=areasListBlock.id %}
{% endif %}
{% if areasStripBlock %}
{% endif %}
{# /.home-content-area #}
{# ── 4. POST-AREA ─────────────────────────────────────────────── #}
{# Post-area content blocks (Promise, Why, Process, etc.) #}
{% for block in postAreaBlocks %}
{% set blockType = block.content_group ?? block._group ?? block.type ?? 'unknown' %}
{% set blockTypeSlug = blockType|lower|replace({'\\': '-', '_': '-', ' ': '-'}) %}
{% set layoutWidth = block.layout_width|default('auto') %}
{% set layoutAlignment = block.layout_alignment|default('auto') %}
{% set forceFullWidth = block.force_full_width in ['1', 1, true, 'true', 'on'] %}
{% if forceFullWidth %}{% set layoutWidth = 'full' %}{% endif %}
{% set wrapperClasses = ['block-wrapper', 'block-wrapper--' ~ blockTypeSlug] %}
{% if layoutWidth not in ['auto', ''] %}{% set wrapperClasses = wrapperClasses|merge(['block-wrapper--width-' ~ layoutWidth]) %}{% endif %}
{% if layoutAlignment not in ['auto', ''] %}{% set wrapperClasses = wrapperClasses|merge(['block-wrapper--align-' ~ layoutAlignment]) %}{% endif %}
{% set blockIndex = block.id ?? loop.index0 %}
{% set partialName = 'blocks/' ~ blockTypeSlug %}
{% if hasPartial(partialName) %}
{% partial partialName block=block index=blockIndex %}
{% else %}
{% set partialNameUnderscore = 'blocks/' ~ blockType %}
{% if hasPartial(partialNameUnderscore) %}
{% partial partialNameUnderscore block=block index=blockIndex %}
{% else %}
{% endfor %}
{# /.home-post-area #}
{# ── 5. POST-STRIP SCROLLSPY ─────────────────────────────────── #}
{# IntersectionObserver: marks the post-strip link active whose
target section is currently most visible. rootMargin top = -220px
accounts for fixed nav (136px) + post-strip (60px) + 24px buffer.
Prototype: Banner.html lines 2322-2336. #}
{# ── 6. POST-STRIP SLIDE-IN ON SCROLL ────────────────────────── #}
{# Shows fixed post-strip once areas strip scrolls above viewport. #}
{# ── 7. STRIP OVERFLOW CLIP DETECTION ────────────────────────── #}
{# Adds .is-clipped to each strip whose items overflow the row.
CSS ::after then shows a trailing … at the container edge. #}
Missing partial: {{ partialName }}
{% endif %}
{% endif %}