{% extends 'public/base.html' %} {% block title %}{{ site_name }} - {{ site_tagline }}{% endblock %} {% block hreflang %} {#- Posts-mode homepage: /?lang=xx exists for every active language (the language switcher links them all), so the head must declare the same hreflang cluster — mirroring what page.html emits for a builder homepage. Only on page 1: paginated /?page=N URLs are not language equivalents of each other. x-default points to the clean default URL. -#} {%- if all_versions is defined and all_versions|length > 1 and posts.page == 1 %} {%- set _dl = default_language or 'en' %} {%- for version in all_versions %} {%- endfor %} {%- endif %} {% endblock %} {% block schema %} {% if posts_schema %} {% endif %} {% endblock %} {% block content %}

{{ site_name }}

{{ site_tagline }}

{% if posts.items %}
{% for post in posts.items %}
{% if post.featured_image %} {% set card_img = images_map.get(post.featured_image) if images_map is defined else None %} {# The whole image is a link to the post. aria-hidden + tabindex=-1 keep it out of the tab order and the accessibility tree: the title link right below goes to the same URL, so assistive tech announces one link per card instead of two identical ones. Google still follows the href and uses the img alt as its anchor text. #}
{% endif %}

{{ post.title }}

· {{ post.language|upper }}
{% if post.excerpt %}

{{ post.excerpt }}

{% endif %}
{% endfor %}
{% if posts.pages > 1 %} {# Pagination links: include lang= ONLY when the visitor is NOT on the default language. Generating /?page=N&lang= as an internal link would otherwise let Google index /?lang=&page=N as a distinct URL with its own canonical, defeating the /?lang= → / 301-redirect in index(). url_for() drops keys whose value is None. #} {%- if current_language and current_language != (default_language or 'en') %} {%- set _pag_lang = current_language %} {%- else %} {%- set _pag_lang = none %} {%- endif %} {% endif %} {% else %}

{{ pt('no_posts') }}

{{ pt('check_back') }}

{% endif %} {% endblock %}