{% load static vantage i18n %} {% comment %} The sign-in page the package ships, so a project never has to write one. Standalone rather than an extension of base.html: an anonymous visitor has no sidebar, no breadcrumb and no nav to render, and a shell full of links they cannot follow is noise on the one screen that has to be obvious. No skip link here on purpose. WCAG 2.4.1 is about bypassing *repeated* blocks; this page has one landmark and the first tab stop is already the username field. {% endcomment %} {% block title %}{% blocktranslate with site_title=settings.SITE_TITLE %}Sign in · {{ site_title }}{% endblocktranslate %}{% endblock %} {% if settings.FAVICON %}{% endif %} {# Blocking and inline on purpose: a deferred script paints light first and flips. #} {{ no_flash_script|safe }} {{ theme_css|safe }} {% if settings.CUSTOM_CSS %}{% endif %}
{% include "vantage/partials/brand.html" with mark_class="v-auth-mark" %}

{% translate "Sign in" %}

{% if form.non_field_errors %} {% comment %} role="alert" rather than a bare styled box: after a failed POST the page reloads and a screen reader user otherwise lands on a form with no idea why they are back on it. {% endcomment %} {% endif %}
{% csrf_token %} {% for field in form %}
{{ field }} {% if field.help_text %}

{{ field.help_text }}

{% endif %} {% if field.errors %}

{{ field.label }}: {% for error in field.errors %}{{ error }} {% endfor %}

{% endif %}
{% endfor %}
{% block auth_footer %}{% endblock %}
{% if settings.LOGIN_IMAGE %} {% comment %} Decoration, so alt="" — announcing a stock photograph before the password box is a cost with no reader on the other end. {% endcomment %}
{% endif %}