{% import 'macros.html' as m with context %} {% if preamble %}
{{ preamble|md|safe }}
{% endif %} {% if posture and assessed %}
{{ dial(posture.score, grade=posture.grade, label='Posture', arc=score_arc, palette=ctx.palette)|safe }}
{{ headline }}
{{ actionable|num }} actionable {{ actionable|plural('finding') }}{% if kev %} · {{ kev|num }} known exploited{% endif %} · assessed {{ ctx.data.observed_label }}
{% if severity %}{{ m.severity_tiles(severity, compact=true) }}{% endif %}
{% endif %} {% if kpis %}
Surface
{{ m.strip(kpis) }}
{% endif %}
{{ narrative|md|safe }}
{% if ai and disclose %}

This summary was drafted by a language model from the computed findings, then included without editing.

{% endif %} {% if deductions %}
What the score reflects
{% for row in deductions %} {% endfor %}
ConditionObservedPoints
{{ row.label }}{{ row.count|num }}-{{ row.points|round|int }}

The score starts at 100. Each condition deducts up to a fixed ceiling, so no single class of finding can take the score to zero on its own.

{% endif %}