{{ icon("sparkle", "icon--sm reasoning__icon") }} Thinking… {{ icon("chevron-down", "icon--sm reasoning__chevron") }}
{# innerHTML, not beforeend: the frame carries the whole block of thinking each time, exactly as `render` and `tools` do. Appending it repeated everything already shown, so the panel grew quadratically. #}{{ icon("sparkle", "icon--sm reasoning__icon") }} {% if message.reasoning_ms %} Thought for {{ message.reasoning_ms | duration }} {% else %} Reasoning {% endif %} {{ icon("chevron-down", "icon--sm reasoning__chevron") }}
{{ icon("x", "icon--sm") }} Stopped. This reply is cut short.
{% endif %} {% elif message.content %} {# `tokens` escapes and then marks up: @mentions read as references rather than as punctuation. It must stay `pre-wrap` -- the newlines are still carried by CSS, not by markup. #}