{% if record %} {% if record.page_type == 'builder' %} {# Sitewide coastal banner page-bg — home only. position:fixed deep-night layer at z-index 0. Two SVG wave layers converge on scroll via --conv. See partials/coastal-page-bg.htm. #} {% partial 'coastal-page-bg' %}
{# ── 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 ──────────────────────────────────────────── #}
{% 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 %}
Missing partial: {{ partialName }}
{% endif %} {% endif %}
{% 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. #}
{# /.builder-page.home-page #} {% else %}

{{ record.title }}

{{ record.content_html|raw }}
{% endif %} {% else %}

Welcome

Please create a Tailor entry with slug home in the Content\Page section.

Create Home Entry
{% endif %} {% put scripts %} {% endput %} {% put styles %} {% endput %}