{% extends "base.html" %} {% block title %}Scan #{{ scan.id }} — {{ domain_name }}{% endblock %} {% block content %} {# ─── Header ──────────────────────────────────────────────────────────── #}
back to scans

{{ domain_name }} #{{ scan.id }}

{{ scan.started_at.strftime("%Y-%m-%d %H:%M UTC") }} {% if scan.finished_at %} {{ scan.finished_at.strftime("%H:%M UTC") }} {% set dur = (scan.finished_at - scan.started_at).total_seconds() %} {{ "%.1f"|format(dur) }}s {% endif %}

{% include "partials/_scan_status.html" %} {% if previous_scan_id %} Diff vs #{{ previous_scan_id }} {% endif %}
{# ─── KPI strip ──────────────────────────────────────────────────────── #} {% set total = rows|length %} {% set scored_count = rows|selectattr("score", "ne", None)|list|length %} {% set high_count = rows|selectattr("score", "ne", None)|selectattr("score", "ge", 70)|list|length %} {% set probed_count = rows|selectattr("status_code", "ne", None)|list|length %}
{% set kpi_cards = [ ('Subdomains', total, 'M3 7h18M3 12h18M3 17h18', 'slate'), ('Scored', scored_count, 'M9 11l3 3L22 4M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11', 'brand'), ('High-score (≥70)', high_count, 'm12 2 2.4 7.4H22l-6 4.6 2.3 7.4L12 17l-6.3 4.4 2.3-7.4-6-4.6h7.6Z', 'blood'), ('Probed', probed_count, 'M22 12h-4l-3 9L9 3l-3 9H2', 'emerald'), ] %} {% for label, value, icon_d, tint in kpi_cards %}
{{ label }}

{{ value }}

{% endfor %}
{# ─── Filter + export bar ────────────────────────────────────────────── #}
export {% for fmt in ["json", "csv", "txt", "md"] %} .{{ fmt }} {% endfor %}
{% include "partials/_scored_rows.html" %}
{# ─── Screenshots grid ───────────────────────────────────────────────── #} {% if screenshots_by_fqdn %}

Screenshots {{ screenshots_by_fqdn|length }}

{% for fqdn, shot_id in screenshots_by_fqdn.items()|sort %} {% endfor %}
{# Lightbox #}
{% endif %} {% endblock %}