{% if metaDescription is defined %} {% endif %} {% if hreflangTags is defined %} {% for tag in hreflangTags %} {% endfor %} {% endif %} {% block meta %}{% endblock %} {# Favicon #} {% block stylesheets %} {{ encore_entry_link_tags('app') }} {% if editMode|default(false) %} {{ encore_entry_link_tags('admin-tour') }} {% endif %} {% endblock %} {% if editMode|default(false) %} {{ include('components/_editor_toolbar.html.twig') }} {% endif %} {# The coming soon page is standalone: no header, no burger menu. #} {% set show_menu = pageTemplate|default('') != 'coming_soon' %} {% if show_menu %} {{ include('components/_header.html.twig') }} {% endif %} {% if show_menu %} {{ include('components/_nav.html.twig') }} {% endif %} {% block body %}{% endblock %} {# Global non-administrable site footer. Overridden empty by templates that ship their own page-specific footer (e.g. pages/coming_soon.html.twig) to avoid double footers. #} {% block site_footer %} {{ include('components/_footer.html.twig') }} {% endblock %} {% if editMode|default(false) %} {# Media selector modal - single shared instance for every [data-editable-image] field on the page (nav's contact photo included). Never duplicate this include in page templates - see MediaSelectorModal.ts, one instance per page load. #} {{ include('components/_media-selector-modal.html.twig') }} {% endif %} {% block javascripts %} {{ encore_entry_script_tags('app') }} {% if editMode|default(false) %} {{ encore_entry_script_tags('admin-editor') }} {{ encore_entry_script_tags('admin-tour') }} {% endif %} {% endblock %}