{% extends "base.html" %} {% block title %}{{ tr('پیشرفت من') }} - OSAFIS PromptLab - Prompt Injection Lab{% endblock %} {% block body %}
{{ tr('LOCAL PROGRESS') }}

{{ tr('پیشرفت من') }}

{{ tr('خلاصهٔ محلی از پوشش سناریوها، سطح‌های دفاع و امتیاز کسب‌شده. هیچ داده‌ای از دستگاه خارج نمی‌شود.') }}

{{ tr('دانلود کارت پیشرفت') }}{{ tr('دانلود گزارش JSON') }}
{{ tr('سطح تکمیل‌شده') }}{{ completed|length }} / {{ total }}
{{ tr('امتیاز') }}{{ earned }} / {{ max_points }}
{{ tr('تلاش ثبت‌شده') }}{{ report.attempts|length }}

{{ tr('پوشش سناریوها مستقل از درجه سختی است؛ جزئیات هر تلاش در جدول ثبت می‌شود') }}

{% for l in LEVELS %}{% endfor %}{% for x in TARGETS %}{% for l in LEVELS %}{% endfor %}{% endfor %}
{{ tr('سناریو') }}{{ tr('استاندارد') }}{{ LEVEL_FA[l] }}{{ tr('امتیاز هر سطح') }}
{{ x.title }}{{ x.curriculum.standards[0] }}{{ '✓' if (x.id ~ ':' ~ l) in completed else '-' }}{{ x.curriculum.points }}
{{ tr('LOCAL PROGRESS') }}

{{ tr('آخرین تلاش‌ها') }}

{% if report.attempts %} {% for attempt in report.attempts[:50] %}{% set target = TARGETS | selectattr('id', 'equalto', attempt.target) | first %}{% endfor %}
{{ tr('تاریخ') }}{{ tr('سناریو') }}{{ tr('سطح') }}{{ tr('درجه سختی') }}{{ tr('نتیجه') }}{{ tr('زمان') }}{{ tr('موتور') }}
{{ target.title if target else attempt.target }} {{ attempt.level | upper }} {{ DIFFICULTY_LABELS.get((attempt.telemetry or {}).get('difficulty'), '-') }} {% if attempt.state == 'owned' %}{{ tr('سامانه تسخیر شد') }}{% elif attempt.state == 'blocked' %}{{ tr('اثر مهار شد') }}{% elif attempt.state == 'error' %}{{ tr('خطای موتور') }}{% else %}{{ tr('حمله ناموفق بود') }}{% endif %} {{ attempt.elapsed_ms }} ms{{ attempt.engine }}{% if attempt.telemetry and attempt.telemetry.subsystem %}{{ attempt.telemetry.subsystem.kind }} · {{ attempt.telemetry.subsystem.trace_id }}{% endif %}
{% else %}

{{ tr('هنوز تلاشی ثبت نشده است.') }}

{% endif %}
{% endblock %}