diff --git a/claude_code_log/html/renderer.py b/claude_code_log/html/renderer.py
index 893768e2..3b797a5e 100644
--- a/claude_code_log/html/renderer.py
+++ b/claude_code_log/html/renderer.py
@@ -27,6 +27,7 @@
BashInput,
EditInput,
ExitPlanModeInput,
+ GlobInput,
MultiEditInput,
ReadInput,
TaskInput,
@@ -147,15 +148,19 @@ class HtmlRenderer(Renderer):
# -------------------------------------------------------------------------
def format_SystemMessage(self, message: SystemMessage) -> str:
+ """Format →
...
."""
return format_system_content(message)
def format_HookSummaryMessage(self, message: HookSummaryMessage) -> str:
+ """Format → ... ."""
return format_hook_summary_content(message)
def format_SessionHeaderMessage(self, message: SessionHeaderMessage) -> str:
+ """Format → ."""
return format_session_header_content(message)
def format_DedupNoticeMessage(self, message: DedupNoticeMessage) -> str:
+ """Format → ...."""
return format_dedup_notice_content(message)
# -------------------------------------------------------------------------
@@ -163,27 +168,35 @@ def format_DedupNoticeMessage(self, message: DedupNoticeMessage) -> str:
# -------------------------------------------------------------------------
def format_UserTextMessage(self, message: UserTextMessage) -> str:
+ """Format → rendered markdown HTML."""
return format_user_text_model_content(message)
def format_UserSlashCommandMessage(self, message: UserSlashCommandMessage) -> str:
+ """Format → /cmd."""
return format_user_slash_command_content(message)
def format_SlashCommandMessage(self, message: SlashCommandMessage) -> str:
+ """Format → /cmd arg."""
return format_slash_command_content(message)
def format_CommandOutputMessage(self, message: CommandOutputMessage) -> str:
+ """Format → ...
."""
return format_command_output_content(message)
def format_BashInputMessage(self, message: BashInputMessage) -> str:
+ """Format → $ cmd
."""
return format_bash_input_content(message)
def format_BashOutputMessage(self, message: BashOutputMessage) -> str:
+ """Format → ...
."""
return format_bash_output_content(message)
def format_CompactedSummaryMessage(self, message: CompactedSummaryMessage) -> str:
+ """Format → ... ."""
return format_compacted_summary_content(message)
def format_UserMemoryMessage(self, message: UserMemoryMessage) -> str:
+ """Format → ... ."""
return format_user_memory_content(message)
# -------------------------------------------------------------------------
@@ -191,12 +204,15 @@ def format_UserMemoryMessage(self, message: UserMemoryMessage) -> str:
# -------------------------------------------------------------------------
def format_AssistantTextMessage(self, message: AssistantTextMessage) -> str:
+ """Format → rendered markdown HTML."""
return format_assistant_text_content(message)
def format_ThinkingMessage(self, message: ThinkingMessage) -> str:
+ """Format → ... (foldable if >10 lines)."""
return format_thinking_content(message, line_threshold=10)
def format_UnknownMessage(self, message: UnknownMessage) -> str:
+ """Format → JSON dump
."""
return format_unknown_content(message)
# -------------------------------------------------------------------------
@@ -204,33 +220,43 @@ def format_UnknownMessage(self, message: UnknownMessage) -> str:
# -------------------------------------------------------------------------
def format_BashInput(self, input: BashInput) -> str:
+ """Format → $ command
."""
return format_bash_input(input)
def format_ReadInput(self, input: ReadInput) -> str:
+ """Format → ."""
return format_read_input(input)
def format_WriteInput(self, input: WriteInput) -> str:
+ """Format → file path + syntax-highlighted content preview."""
return format_write_input(input)
def format_EditInput(self, input: EditInput) -> str:
+ """Format → file path + diff of old_string/new_string."""
return format_edit_input(input)
def format_MultiEditInput(self, input: MultiEditInput) -> str:
+ """Format → file path + multiple diffs."""
return format_multiedit_input(input)
def format_TaskInput(self, input: TaskInput) -> str:
+ """Format → prompt text
."""
return format_task_input(input)
def format_TodoWriteInput(self, input: TodoWriteInput) -> str:
+ """Format → ."""
return format_todowrite_input(input)
def format_AskUserQuestionInput(self, input: AskUserQuestionInput) -> str:
+ """Format → questions as definition list."""
return format_askuserquestion_input(input)
def format_ExitPlanModeInput(self, input: ExitPlanModeInput) -> str:
+ """Format → empty string (no content)."""
return format_exitplanmode_input(input)
def format_ToolUseContent(self, content: ToolUseContent) -> str:
+ """Format → ."""
return render_params_table(content.input)
# -------------------------------------------------------------------------
@@ -238,27 +264,35 @@ def format_ToolUseContent(self, content: ToolUseContent) -> str:
# -------------------------------------------------------------------------
def format_ReadOutput(self, output: ReadOutput) -> str:
+ """Format → syntax-highlighted file content."""
return format_read_output(output)
def format_WriteOutput(self, output: WriteOutput) -> str:
+ """Format → status message (e.g. 'Wrote 42 bytes')."""
return format_write_output(output)
def format_EditOutput(self, output: EditOutput) -> str:
+ """Format → status message (e.g. 'Applied edit')."""
return format_edit_output(output)
def format_BashOutput(self, output: BashOutput) -> str:
+ """Format → stdout/stderr
."""
return format_bash_output(output)
def format_TaskOutput(self, output: TaskOutput) -> str:
+ """Format → rendered markdown of task result."""
return format_task_output(output)
def format_AskUserQuestionOutput(self, output: AskUserQuestionOutput) -> str:
+ """Format → user's answers as definition list."""
return format_askuserquestion_output(output)
def format_ExitPlanModeOutput(self, output: ExitPlanModeOutput) -> str:
+ """Format → status message."""
return format_exitplanmode_output(output)
def format_ToolResultContent(self, output: ToolResultContent) -> str:
+ """Format → raw content
(fallback for unknown tools)."""
return format_tool_result_content_raw(output)
# -------------------------------------------------------------------------
@@ -278,9 +312,15 @@ def _tool_title(
return f"{prefix}{escaped_name}"
def title_TodoWriteInput(self, message: TemplateMessage) -> str: # noqa: ARG002
+ """Title → '📝 Todo List'."""
return "📝 Todo List"
+ def title_AskUserQuestionInput(self, message: TemplateMessage) -> str: # noqa: ARG002
+ """Title → '❓ Asking questions...'."""
+ return "❓ Asking questions..."
+
def title_TaskInput(self, message: TemplateMessage) -> str:
+ """Title → '🔧 Task (subagent_type)'."""
content = cast(ToolUseMessage, message.content)
input = cast(TaskInput, content.input)
escaped_name = escape_html(content.tool_name)
@@ -297,18 +337,38 @@ def title_TaskInput(self, message: TemplateMessage) -> str:
return f"🔧 {escaped_name}"
def title_EditInput(self, message: TemplateMessage) -> str:
+ """Title → '📝 Edit '."""
input = cast(EditInput, cast(ToolUseMessage, message.content).input)
return self._tool_title(message, "📝", input.file_path)
def title_WriteInput(self, message: TemplateMessage) -> str:
+ """Title → '📝 Write '."""
input = cast(WriteInput, cast(ToolUseMessage, message.content).input)
return self._tool_title(message, "📝", input.file_path)
def title_ReadInput(self, message: TemplateMessage) -> str:
+ """Title → '📄 Read [, lines N-M]'."""
input = cast(ReadInput, cast(ToolUseMessage, message.content).input)
- return self._tool_title(message, "📄", input.file_path)
+ summary = input.file_path
+ # Add line range info if available
+ if input.limit is not None:
+ offset = input.offset or 0
+ if input.limit == 1:
+ summary = f"{summary}, line {offset + 1}"
+ else:
+ summary = f"{summary}, lines {offset + 1}-{offset + input.limit}"
+ return self._tool_title(message, "📄", summary)
+
+ def title_GlobInput(self, message: TemplateMessage) -> str:
+ """Title → '🔍 Glob [ in path]'."""
+ input = cast(GlobInput, cast(ToolUseMessage, message.content).input)
+ summary = input.pattern
+ if input.path:
+ summary = f"{summary} in {input.path}"
+ return self._tool_title(message, "🔍", summary)
def title_BashInput(self, message: TemplateMessage) -> str:
+ """Title → '💻 Bash '."""
input = cast(BashInput, cast(ToolUseMessage, message.content).input)
return self._tool_title(message, "💻", input.description)
diff --git a/claude_code_log/html/templates/components/global_styles.css b/claude_code_log/html/templates/components/global_styles.css
index 4d4f1b3f..ce6572aa 100644
--- a/claude_code_log/html/templates/components/global_styles.css
+++ b/claude_code_log/html/templates/components/global_styles.css
@@ -42,7 +42,7 @@
--question-accent: #f5a623;
--question-bg: #fffbf0;
--answer-accent: #4caf50;
- --answer-bg: #f0fff4;
+ --answer-bg: #fffbf0;
/* Priority palette (purple intensity - darker = more urgent) */
--priority-600: #7c3aed;
@@ -66,6 +66,7 @@
--text-primary: #333;
--text-muted: #666;
--text-secondary: #495057;
+ --fold-color: #888;
/* Border colors */
--border-light: #e0e0e0;
diff --git a/claude_code_log/html/templates/components/message_styles.css b/claude_code_log/html/templates/components/message_styles.css
index aa739996..ea3a9f65 100644
--- a/claude_code_log/html/templates/components/message_styles.css
+++ b/claude_code_log/html/templates/components/message_styles.css
@@ -31,22 +31,22 @@
flex: 1;
display: flex;
align-items: center;
- justify-content: center;
+ justify-content: flex-end;
gap: 0.4em;
cursor: pointer;
user-select: none;
font-size: 0.9em;
font-weight: 500;
- padding: 0.4em;
+ padding: 0.4em 0.8em 0.4em 0.4em;
transition: all 0.2s ease;
- border-bottom: 2px solid transparent;
+ border-bottom: 1px solid transparent;
background: linear-gradient(to bottom, #f8f8f844, #f0f0f0);
}
/* Show border only when folded (content is hidden) */
.fold-bar-section.folded {
border-bottom-style: solid;
- border-bottom-width: 2px;
+ border-bottom-width: 1px;
}
.fold-bar-section:hover {
@@ -72,6 +72,7 @@
.fold-icon {
font-size: 1.1em;
line-height: 1;
+ color: var(--fold-color);
}
.fold-count {
@@ -81,7 +82,7 @@
}
.fold-label {
- color: var(--text-muted);
+ color: var(--fold-color);
font-size: 0.9em;
}
@@ -538,11 +539,6 @@
}
.thinking {
- border-left-color: var(--assistant-dimmed);
-}
-
-/* Full purple when thinking is paired (as pair_first) */
-.thinking.pair_first {
border-left-color: var(--assistant-color);
}
diff --git a/claude_code_log/html/templates/components/todo_styles.css b/claude_code_log/html/templates/components/todo_styles.css
index 22a35140..ea055414 100644
--- a/claude_code_log/html/templates/components/todo_styles.css
+++ b/claude_code_log/html/templates/components/todo_styles.css
@@ -75,7 +75,7 @@
}
.todo-item.medium {
- border-left: 3px solid var(--priority-medium);
+ border-left: 3px solid transparent;
}
.todo-item.low {
@@ -102,17 +102,17 @@
padding: 12px;
background-color: var(--question-bg);
border-radius: 6px;
- border-left: 3px solid var(--question-accent);
+ border-left: 3px solid var(--assistant-color);
}
.question-block:last-child {
margin-bottom: 0;
}
-/* Answered questions in result (lighter, success-tinted) */
+/* Answered questions in result */
.question-block.answered {
background-color: var(--answer-bg);
- border-left-color: var(--answer-accent);
+ border-left-color: var(--user-color);
}
.question-header {
@@ -135,9 +135,13 @@
.answer-text {
font-size: 1.05em;
font-weight: 600;
- color: var(--answer-accent);
+ color: var(--text-primary);
line-height: 1.4;
- padding-left: 4px;
+}
+
+/* Q: and A: labels */
+.qa-label {
+ font-weight: 700;
}
.question-options-hint {
diff --git a/claude_code_log/html/tool_formatters.py b/claude_code_log/html/tool_formatters.py
index 9b0f6ac0..d367e811 100644
--- a/claude_code_log/html/tool_formatters.py
+++ b/claude_code_log/html/tool_formatters.py
@@ -62,9 +62,11 @@ def _render_question_item(q: AskUserQuestionItem) -> str:
escaped_header = escape_html(q.header)
html_parts.append(f'')
- # Question text with icon
+ # Question text with Q: label
question_text = escape_html(q.question)
- html_parts.append(f'❓ {question_text}
')
+ html_parts.append(
+ f'Q: {question_text}
'
+ )
# Options (if present)
if q.options:
@@ -155,8 +157,12 @@ def format_askuserquestion_result(content: str) -> str:
escaped_q = escape_html(question)
escaped_a = escape_html(answer)
html_parts.append('')
- html_parts.append(f'
❓ {escaped_q}
')
- html_parts.append(f'
✅ {escaped_a}
')
+ html_parts.append(
+ f'
Q: {escaped_q}
'
+ )
+ html_parts.append(
+ f'
A: {escaped_a}
'
+ )
html_parts.append("
")
html_parts.append("")
@@ -391,8 +397,12 @@ def format_askuserquestion_output(output: AskUserQuestionOutput) -> str:
escaped_q = escape_html(qa.question)
escaped_a = escape_html(qa.answer)
html_parts.append('')
- html_parts.append(f'
❓ {escaped_q}
')
- html_parts.append(f'
✅ {escaped_a}
')
+ html_parts.append(
+ f'
Q: {escaped_q}
'
+ )
+ html_parts.append(
+ f'
A: {escaped_a}
'
+ )
html_parts.append("
")
html_parts.append("")
diff --git a/test/__snapshots__/test_snapshot_html.ambr b/test/__snapshots__/test_snapshot_html.ambr
index 6ee0eec7..f0d7e69c 100644
--- a/test/__snapshots__/test_snapshot_html.ambr
+++ b/test/__snapshots__/test_snapshot_html.ambr
@@ -54,7 +54,7 @@
--question-accent: #f5a623;
--question-bg: #fffbf0;
--answer-accent: #4caf50;
- --answer-bg: #f0fff4;
+ --answer-bg: #fffbf0;
/* Priority palette (purple intensity - darker = more urgent) */
--priority-600: #7c3aed;
@@ -78,6 +78,7 @@
--text-primary: #333;
--text-muted: #666;
--text-secondary: #495057;
+ --fold-color: #888;
/* Border colors */
--border-light: #e0e0e0;
@@ -1904,7 +1905,7 @@
--question-accent: #f5a623;
--question-bg: #fffbf0;
--answer-accent: #4caf50;
- --answer-bg: #f0fff4;
+ --answer-bg: #fffbf0;
/* Priority palette (purple intensity - darker = more urgent) */
--priority-600: #7c3aed;
@@ -1928,6 +1929,7 @@
--text-primary: #333;
--text-muted: #666;
--text-secondary: #495057;
+ --fold-color: #888;
/* Border colors */
--border-light: #e0e0e0;
@@ -2123,22 +2125,22 @@
flex: 1;
display: flex;
align-items: center;
- justify-content: center;
+ justify-content: flex-end;
gap: 0.4em;
cursor: pointer;
user-select: none;
font-size: 0.9em;
font-weight: 500;
- padding: 0.4em;
+ padding: 0.4em 0.8em 0.4em 0.4em;
transition: all 0.2s ease;
- border-bottom: 2px solid transparent;
+ border-bottom: 1px solid transparent;
background: linear-gradient(to bottom, #f8f8f844, #f0f0f0);
}
/* Show border only when folded (content is hidden) */
.fold-bar-section.folded {
border-bottom-style: solid;
- border-bottom-width: 2px;
+ border-bottom-width: 1px;
}
.fold-bar-section:hover {
@@ -2164,6 +2166,7 @@
.fold-icon {
font-size: 1.1em;
line-height: 1;
+ color: var(--fold-color);
}
.fold-count {
@@ -2173,7 +2176,7 @@
}
.fold-label {
- color: var(--text-muted);
+ color: var(--fold-color);
font-size: 0.9em;
}
@@ -2630,11 +2633,6 @@
}
.thinking {
- border-left-color: var(--assistant-dimmed);
- }
-
- /* Full purple when thinking is paired (as pair_first) */
- .thinking.pair_first {
border-left-color: var(--assistant-color);
}
@@ -3364,7 +3362,7 @@
}
.todo-item.medium {
- border-left: 3px solid var(--priority-medium);
+ border-left: 3px solid transparent;
}
.todo-item.low {
@@ -3391,17 +3389,17 @@
padding: 12px;
background-color: var(--question-bg);
border-radius: 6px;
- border-left: 3px solid var(--question-accent);
+ border-left: 3px solid var(--assistant-color);
}
.question-block:last-child {
margin-bottom: 0;
}
- /* Answered questions in result (lighter, success-tinted) */
+ /* Answered questions in result */
.question-block.answered {
background-color: var(--answer-bg);
- border-left-color: var(--answer-accent);
+ border-left-color: var(--user-color);
}
.question-header {
@@ -3424,9 +3422,13 @@
.answer-text {
font-size: 1.05em;
font-weight: 600;
- color: var(--answer-accent);
+ color: var(--text-primary);
line-height: 1.4;
- padding-left: 4px;
+ }
+
+ /* Q: and A: labels */
+ .qa-label {
+ font-weight: 700;
}
.question-options-hint {
@@ -6704,7 +6706,7 @@
--question-accent: #f5a623;
--question-bg: #fffbf0;
--answer-accent: #4caf50;
- --answer-bg: #f0fff4;
+ --answer-bg: #fffbf0;
/* Priority palette (purple intensity - darker = more urgent) */
--priority-600: #7c3aed;
@@ -6728,6 +6730,7 @@
--text-primary: #333;
--text-muted: #666;
--text-secondary: #495057;
+ --fold-color: #888;
/* Border colors */
--border-light: #e0e0e0;
@@ -6923,22 +6926,22 @@
flex: 1;
display: flex;
align-items: center;
- justify-content: center;
+ justify-content: flex-end;
gap: 0.4em;
cursor: pointer;
user-select: none;
font-size: 0.9em;
font-weight: 500;
- padding: 0.4em;
+ padding: 0.4em 0.8em 0.4em 0.4em;
transition: all 0.2s ease;
- border-bottom: 2px solid transparent;
+ border-bottom: 1px solid transparent;
background: linear-gradient(to bottom, #f8f8f844, #f0f0f0);
}
/* Show border only when folded (content is hidden) */
.fold-bar-section.folded {
border-bottom-style: solid;
- border-bottom-width: 2px;
+ border-bottom-width: 1px;
}
.fold-bar-section:hover {
@@ -6964,6 +6967,7 @@
.fold-icon {
font-size: 1.1em;
line-height: 1;
+ color: var(--fold-color);
}
.fold-count {
@@ -6973,7 +6977,7 @@
}
.fold-label {
- color: var(--text-muted);
+ color: var(--fold-color);
font-size: 0.9em;
}
@@ -7430,11 +7434,6 @@
}
.thinking {
- border-left-color: var(--assistant-dimmed);
- }
-
- /* Full purple when thinking is paired (as pair_first) */
- .thinking.pair_first {
border-left-color: var(--assistant-color);
}
@@ -8164,7 +8163,7 @@
}
.todo-item.medium {
- border-left: 3px solid var(--priority-medium);
+ border-left: 3px solid transparent;
}
.todo-item.low {
@@ -8191,17 +8190,17 @@
padding: 12px;
background-color: var(--question-bg);
border-radius: 6px;
- border-left: 3px solid var(--question-accent);
+ border-left: 3px solid var(--assistant-color);
}
.question-block:last-child {
margin-bottom: 0;
}
- /* Answered questions in result (lighter, success-tinted) */
+ /* Answered questions in result */
.question-block.answered {
background-color: var(--answer-bg);
- border-left-color: var(--answer-accent);
+ border-left-color: var(--user-color);
}
.question-header {
@@ -8224,9 +8223,13 @@
.answer-text {
font-size: 1.05em;
font-weight: 600;
- color: var(--answer-accent);
+ color: var(--text-primary);
line-height: 1.4;
- padding-left: 4px;
+ }
+
+ /* Q: and A: labels */
+ .qa-label {
+ font-weight: 700;
}
.question-options-hint {
@@ -11593,7 +11596,7 @@
--question-accent: #f5a623;
--question-bg: #fffbf0;
--answer-accent: #4caf50;
- --answer-bg: #f0fff4;
+ --answer-bg: #fffbf0;
/* Priority palette (purple intensity - darker = more urgent) */
--priority-600: #7c3aed;
@@ -11617,6 +11620,7 @@
--text-primary: #333;
--text-muted: #666;
--text-secondary: #495057;
+ --fold-color: #888;
/* Border colors */
--border-light: #e0e0e0;
@@ -11812,22 +11816,22 @@
flex: 1;
display: flex;
align-items: center;
- justify-content: center;
+ justify-content: flex-end;
gap: 0.4em;
cursor: pointer;
user-select: none;
font-size: 0.9em;
font-weight: 500;
- padding: 0.4em;
+ padding: 0.4em 0.8em 0.4em 0.4em;
transition: all 0.2s ease;
- border-bottom: 2px solid transparent;
+ border-bottom: 1px solid transparent;
background: linear-gradient(to bottom, #f8f8f844, #f0f0f0);
}
/* Show border only when folded (content is hidden) */
.fold-bar-section.folded {
border-bottom-style: solid;
- border-bottom-width: 2px;
+ border-bottom-width: 1px;
}
.fold-bar-section:hover {
@@ -11853,6 +11857,7 @@
.fold-icon {
font-size: 1.1em;
line-height: 1;
+ color: var(--fold-color);
}
.fold-count {
@@ -11862,7 +11867,7 @@
}
.fold-label {
- color: var(--text-muted);
+ color: var(--fold-color);
font-size: 0.9em;
}
@@ -12319,11 +12324,6 @@
}
.thinking {
- border-left-color: var(--assistant-dimmed);
- }
-
- /* Full purple when thinking is paired (as pair_first) */
- .thinking.pair_first {
border-left-color: var(--assistant-color);
}
@@ -13053,7 +13053,7 @@
}
.todo-item.medium {
- border-left: 3px solid var(--priority-medium);
+ border-left: 3px solid transparent;
}
.todo-item.low {
@@ -13080,17 +13080,17 @@
padding: 12px;
background-color: var(--question-bg);
border-radius: 6px;
- border-left: 3px solid var(--question-accent);
+ border-left: 3px solid var(--assistant-color);
}
.question-block:last-child {
margin-bottom: 0;
}
- /* Answered questions in result (lighter, success-tinted) */
+ /* Answered questions in result */
.question-block.answered {
background-color: var(--answer-bg);
- border-left-color: var(--answer-accent);
+ border-left-color: var(--user-color);
}
.question-header {
@@ -13113,9 +13113,13 @@
.answer-text {
font-size: 1.05em;
font-weight: 600;
- color: var(--answer-accent);
+ color: var(--text-primary);
line-height: 1.4;
- padding-left: 4px;
+ }
+
+ /* Q: and A: labels */
+ .qa-label {
+ font-weight: 700;
}
.question-options-hint {
@@ -16530,7 +16534,7 @@
--question-accent: #f5a623;
--question-bg: #fffbf0;
--answer-accent: #4caf50;
- --answer-bg: #f0fff4;
+ --answer-bg: #fffbf0;
/* Priority palette (purple intensity - darker = more urgent) */
--priority-600: #7c3aed;
@@ -16554,6 +16558,7 @@
--text-primary: #333;
--text-muted: #666;
--text-secondary: #495057;
+ --fold-color: #888;
/* Border colors */
--border-light: #e0e0e0;
@@ -16749,22 +16754,22 @@
flex: 1;
display: flex;
align-items: center;
- justify-content: center;
+ justify-content: flex-end;
gap: 0.4em;
cursor: pointer;
user-select: none;
font-size: 0.9em;
font-weight: 500;
- padding: 0.4em;
+ padding: 0.4em 0.8em 0.4em 0.4em;
transition: all 0.2s ease;
- border-bottom: 2px solid transparent;
+ border-bottom: 1px solid transparent;
background: linear-gradient(to bottom, #f8f8f844, #f0f0f0);
}
/* Show border only when folded (content is hidden) */
.fold-bar-section.folded {
border-bottom-style: solid;
- border-bottom-width: 2px;
+ border-bottom-width: 1px;
}
.fold-bar-section:hover {
@@ -16790,6 +16795,7 @@
.fold-icon {
font-size: 1.1em;
line-height: 1;
+ color: var(--fold-color);
}
.fold-count {
@@ -16799,7 +16805,7 @@
}
.fold-label {
- color: var(--text-muted);
+ color: var(--fold-color);
font-size: 0.9em;
}
@@ -17256,11 +17262,6 @@
}
.thinking {
- border-left-color: var(--assistant-dimmed);
- }
-
- /* Full purple when thinking is paired (as pair_first) */
- .thinking.pair_first {
border-left-color: var(--assistant-color);
}
@@ -17990,7 +17991,7 @@
}
.todo-item.medium {
- border-left: 3px solid var(--priority-medium);
+ border-left: 3px solid transparent;
}
.todo-item.low {
@@ -18017,17 +18018,17 @@
padding: 12px;
background-color: var(--question-bg);
border-radius: 6px;
- border-left: 3px solid var(--question-accent);
+ border-left: 3px solid var(--assistant-color);
}
.question-block:last-child {
margin-bottom: 0;
}
- /* Answered questions in result (lighter, success-tinted) */
+ /* Answered questions in result */
.question-block.answered {
background-color: var(--answer-bg);
- border-left-color: var(--answer-accent);
+ border-left-color: var(--user-color);
}
.question-header {
@@ -18050,9 +18051,13 @@
.answer-text {
font-size: 1.05em;
font-weight: 600;
- color: var(--answer-accent);
+ color: var(--text-primary);
line-height: 1.4;
- padding-left: 4px;
+ }
+
+ /* Q: and A: labels */
+ .qa-label {
+ font-weight: 700;
}
.question-options-hint {
diff --git a/test/test_askuserquestion_rendering.py b/test/test_askuserquestion_rendering.py
index a77f7f98..22949214 100644
--- a/test/test_askuserquestion_rendering.py
+++ b/test/test_askuserquestion_rendering.py
@@ -75,8 +75,8 @@ def test_format_askuserquestion_multiple_questions(self):
assert "Treat .tar/.tar.gz like .zip" in html
assert "Only process tar archives inside ZIP files" in html
- # Check question icon
- assert "❓" in html
+ # Check question label
+ assert "Q:" in html
# Check select hint
assert "(select one)" in html
@@ -149,7 +149,7 @@ def test_format_askuserquestion_legacy_single_question(self):
# Should still render the question
assert 'class="askuserquestion-content"' in html
assert "What is your preference?" in html
- assert "❓" in html
+ assert "Q:" in html
def test_format_askuserquestion_no_options(self):
"""Test AskUserQuestion formatting without options."""
@@ -224,8 +224,8 @@ def test_format_result_single_qa(self):
assert 'class="question-block answered"' in html
assert "What is your preference?" in html
assert "Option A" in html
- assert "❓" in html
- assert "✅" in html
+ assert "Q:" in html
+ assert "A:" in html
def test_format_result_multiple_qa(self):
"""Test formatting a result with multiple Q&A pairs."""