{% extends "basis.html" %} {# Assistent „Konto schützen“ (Konzept, Zweiter Faktor): Einstieg mit Wahl (1/3) · Passkey oder App (2/3) · Wiederherstellungscodes (3/3) · Abschluss (S-15). Eine Aufgabe je Schritt; Fokus beim Laden auf der h1 (anmeldung.js), Fortschritt als Liste mit aria-current. Alle Formulare über den Settings-Vorschalter (Frische, „letzter Weg“, Häkchen bei den Codes). 23.10.2026 – mit `ziel` (Positivliste, nur „speicher“): Sicherheitsschritt vor dem Onlinespeicher. Passkey oder App (1/2) · Wiederherstellungscodes (2/2; nach einem Passkey überspringbar) · Abschluss „bereit“ OHNE strengen Schutz (der Mail-Code bleibt allein gültig). `zq` hängt `&ziel=…` an jeden Link und jedes versteckte weiter/hier-Feld. #} {% set nr = ({"passkey": 1, "app": 1, "codes": 2, "bereit": 2, "einstieg": 1, "fertig": 2} if ziel else {"einstieg": 1, "passkey": 2, "app": 2, "codes": 3, "fertig": 3, "bereit": 3})[schritt] %}{% set von = 2 if ziel else 3 %}{% set schritt_text = ta.s_schritt_von | replace("{m}", von | string) %} {% block titel %}{% if v and v.fehler %}{{ ta.fehler_praefix }}{% endif %}{% if nr and schritt not in ("fertig", "bereit") %}{{ schritt_text | replace("{n}", nr | string) }}: {% endif %}{{ ta.titel.sichern if ziel or schritt == "bereit" else ta.titel.schuetzen }} – Timbre{% endblock %} {% block kopf %}{% if aussehen %}{% endif %}{% endblock %} {% block hauptklasse %} class="an-haupt"{% endblock %} {% block inhalt %}{% set nr = ({"passkey": 1, "app": 1, "codes": 2, "bereit": 2, "einstieg": 1, "fertig": 2} if ziel else {"einstieg": 1, "passkey": 2, "app": 2, "codes": 3, "fertig": 3, "bereit": 3})[schritt] %}{% set von = 2 if ziel else 3 %}{% set schritt_text = ta.s_schritt_von | replace("{m}", von | string) %}
{% set titel = {"einstieg": ta.s_einstieg_titel, "passkey": ta.s_pk_titel, "app": ta.s_app_verbinden, "codes": ta.s_codes_titel, "fertig": ta.s_fertig_titel, "bereit": ta.s_bereit_titel}[schritt] %} {% if schritt not in ("fertig", "bereit") %}
    {% for i in range(1, von + 1) %}
  1. {{ schritt_text | replace("{n}", i | string) }}{% if i < nr %} – {{ ta.erledigt }}{% endif %}
  2. {% endfor %}
{% endif %}

{{ titel }}

{# S-21: Fehlerzusammenfassung wie überall direkt nach der h1 #} {% if v %}{% if v.fehler %}

{{ ta.fehler_ueberschrift }}

{% endif %} {% for h in v.hinweise %}

{{ h.text }}

{% endfor %}{% endif %} {% if schritt == "einstieg" %}

{{ ta.s_einstieg_text }}

{{ ta.s_freiwillig }}

{% if ziel %}{% endif %}
{{ ta.s_wahl }}
{{ ta.s_spaeter }}
{% elif schritt == "passkey" %} {% if wege.passkey %}

{{ ta.s_pk_da }}

{{ ta.s_weiter }}

{% else %}

{{ ta.s_pk_text }}

{% endif %} {% elif schritt == "app" %} {% if wege.totp %}

{{ ta.s_app_da }}

{{ ta.s_weiter }}

{% else %}
    {% for s in ta.s_app_schritte %}
  1. {{ s }}
  2. {% endfor %}
{% if v.totp_qr %}
{{ ta.s_qr_text }}
{% endif %} {% if v.totp_schluessel %}

otpauth://
{% endif %}
{% set totp_fehler = v.fehler | selectattr('feld', 'equalto', 'f-totp') | list %}
{{ ta.s_app_hilfe }}{% if totp_fehler %}{{ totp_fehler[0].text }}{% endif %}
{% endif %} {% elif schritt == "codes" %}

{{ ta.s_codes_text }}

{# Sicherheitsschritt: nach einem Passkey sind die Codes ein Angebot (überspringbar); nach der App Pflicht – ohne Codes sperrt ein verlorenes Handy aus, sobald der strenge Schutz an ist #} {% set codes_frei = ziel and wege.passkey and not wege.totp %} {% if codes_frei %}

{{ ta.s_codes_angebot }}

{% endif %} {% if v.codes and v.codes_offen %}

{% set gs = v.fehler | selectattr('feld', 'equalto', 'f-gesichert') | list %}{# S-20: nur der eigene Fehler markiert das Häkchen #} {% if gs %}{{ gs[0].text }}{% endif %}
{% else %}
{% endif %} {% if codes_frei %}

{{ ta.s_codes_ueberspringen }}

{% endif %} {% elif schritt == "bereit" %} {# Abschluss vor dem Speicher: ehrlich – eingerichtet ist ein Zusatzweg, der Mail-Code gilt weiter allein #}

{{ ta.s_bereit_text }}

{% if codes_da %}

{{ ta.s_codes_da }}

{% endif %} {# Erst-Einrichtung (24.10.2026, Variante B): einmal je neuem Konto „Noch eins – So sieht Timbre bei dir aus“ statt des Links #} {% if aussehen %}{% import "aussehen_block.html" as ae with context %}{{ ae.block(t, "speicher", false, true) }} {% else %}

{{ ta.s_zum_speicher }}

{% endif %}

{{ ta.s_streng_text }} {{ ta.s_streng_link }}

{% elif schritt == "fertig" %} {% if codes_da %}

{{ ta.s_codes_da }}

{% endif %} {% if nutzer.schutz_an %}

{{ ta.s_streng_ist_an }}

{{ ta.s_fertig_text }}

{# S-16: „wie bisher mit Passkey“ nur, wenn es einen Passkey gibt; S-17: wartende Konten zurück zur Warteseite #} {% if gesperrt %}

{{ ta.s_zur_freigabe }}

{% else %}
{{ ta.s_zur_library }}{{ ta.s_zu_quellen }}
{% endif %} {% else %}{# 25.10.2026: nie automatisch – bewusst per Knopf, „Später“ lässt alles, wie es ist #}

{{ ta.s_eingerichtet }}

{{ ta.s_streng_erklaerung }}

{{ ta.s_spaeter }}
{% endif %} {% endif %} {% if schritt not in ("einstieg", "fertig", "bereit") %}{% endif %} {% if schritt in ("einstieg", "fertig") %}
{{ ta.geraet_verloren }}

{{ ta.geraet_verloren_text }}

{% endif %}
{% endblock %}