diff --git a/camp/character/templates/character/_character_summary.html b/camp/character/templates/character/_character_summary.html
new file mode 100644
index 00000000..79f87b8d
--- /dev/null
+++ b/camp/character/templates/character/_character_summary.html
@@ -0,0 +1,269 @@
+{% load character_sheet %}
+{% load markdown %}
+
+
+
+{% comment %} OOB messages so alerts update during HTMX swaps {% endcomment %}
+{% if request.htmx %}{% include "snippets/messages.html" %}{% endif %}
+
+{# Removed hidden auto-refresh; rely on HX-Trigger "refresh-character" and event-driven summary refresh #}
+
+{% if issues %}
+
+
+ {% for issue in issues %}
+ {% if issue.feature_id %}
+ -
+
+ {{issue.reason | markdown}}
+
+
+ {% else %}
+ - {{issue.reason | markdown}}
+ {% endif %}
+ {% endfor %}
+
+{% endif %}
+
+{% include "character/card_snippet.html" with card=feature.power_card subcards=feature.sub_cards %}
+
+
+ {% if feature.parent %}
+
Part of {{ feature.parent.display_name }}
+ {% endif %}
+
+ {% if feature.supersedes %}
+
Supersedes {{ feature.supersedes.display_name}}
+ {% endif %}
+
+ {% if feature.is_superseded %}
+
Superseded by {{ feature.superseded_by.display_name }}
+ {% endif %}
+
+ {% if purchase_form %}
+ {% if feature.unused_bonus > 0 %}
+
You have {{ feature.unused_bonus }} unused bonus rank(s). Your next purchase is free.
+ {% endif %}
+
+ {% if feature.should_render %}
+
+
+
+ {% elif no_purchase_reason %}
+
You can not currently purchase this because:
+
{{ no_purchase_reason | markdown }}
+ {% endif %}
+
+ {% endif %}
+
+ {% if explain_ranks and feature.should_render %}
+
+
Details
+ {% for explanation in explain_ranks %}
+
{{ explanation | feature_markdown:feature_base }}
+ {% endfor %}
+
+ {% endif %}
+
+ {% if feature.granted_features and feature.should_render %}
+
+ {% endif %}
+
+ {% if feature.discounted_features and feature.should_render %}
+
+
Discounted Features
+
+
+ {% endif %}
+
+ {% if choices %}
+
+ {% for key, choice in choices.items %}
+ {% if choice.controller.limit > 1 %}
+
{{ choice.controller.name }} ({{choice.controller.choices_remaining}}/{{choice.controller.limit}})
+ {% else %}
+
{{ choice.controller.name }}
+ {% endif %}
+ {% if choice.controller.description %}
+
{{ choice.controller.description | markdown }}
+ {% endif %}
+ {% if choice.taken %}
+
Selected Choices
+
+ {% endif %}
+ {% if choice.available %}
+
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+
+ {% if subfeatures %}
+
Purchased Features
+
+ {% endif %}
+
+ {% for group in subfeatures_available %}
+ {% if group.has_available %}
+
{{group.name}}
+ {% if group.explain %}
+
{{ group.explain }}
+ {% endif %}
+ {% if group.available %}
+
+ {% endif %}
+
+ {% for category, available in group.available_categories.items %}
+
+ {% endfor %}
+ {% endif %}
+ {% endfor %}
+
+
+
+
+
+
diff --git a/camp/character/templates/character/character_base.html b/camp/character/templates/character/character_base.html
index 86e44d71..1260931c 100644
--- a/camp/character/templates/character/character_base.html
+++ b/camp/character/templates/character/character_base.html
@@ -7,19 +7,19 @@
{% endblock %}
{% block body_title %}
-