diff --git a/claude_code_log/renderer.py b/claude_code_log/renderer.py
index 2052ca97..e4c0de9f 100644
--- a/claude_code_log/renderer.py
+++ b/claude_code_log/renderer.py
@@ -1290,8 +1290,7 @@ def format_tool_result_content(
data_url = f"data:{media_type};base64,{data}"
image_html_parts.append(
f''
+ f'class="tool-result-image" />'
)
raw_content = "\n".join(content_parts)
has_images = len(image_html_parts) > 0
@@ -1469,7 +1468,7 @@ def format_image_content(image: ImageContent) -> str:
# Create a data URL from the base64 image data
data_url = f"data:{image.source.media_type};base64,{image.source.data}"
- return f'
'
+ return f'
'
def _is_compacted_session_summary(text: str) -> bool:
diff --git a/claude_code_log/templates/components/filter_styles.css b/claude_code_log/templates/components/filter_styles.css
index 570f107c..01efe3a1 100644
--- a/claude_code_log/templates/components/filter_styles.css
+++ b/claude_code_log/templates/components/filter_styles.css
@@ -1,12 +1,12 @@
/* Filter toolbar and controls */
.filter-toolbar {
- background-color: #f8f9fa66;
+ background-color: var(--neutral-dimmed);
border-radius: 8px;
padding: 12px 16px;
margin-bottom: 16px;
box-shadow: -7px -7px 10px #eeeeee44, 7px 7px 10px #00000011;
- border-left: #ffffff66 1px solid;
- border-top: #ffffff66 1px solid;
+ border-left: var(--white-dimmed) 1px solid;
+ border-top: var(--white-dimmed) 1px solid;
border-bottom: #00000017 1px solid;
border-right: #00000017 1px solid;
display: none;
@@ -35,14 +35,14 @@
.toolbar-header h3 {
margin: 0;
font-size: 1em;
- color: #495057;
+ color: var(--text-secondary);
font-weight: 600;
}
.close-toolbar-btn {
background: none;
border: none;
- color: #666;
+ color: var(--text-muted);
cursor: pointer;
font-size: 20px;
padding: 5px;
@@ -58,8 +58,8 @@
}
.close-toolbar-btn:hover {
- background-color: #ffffff66;
- color: #333;
+ background-color: var(--white-dimmed);
+ color: var(--text-primary);
}
.filter-section {
@@ -83,7 +83,7 @@
border: 1px solid #dee2e6;
border-radius: 20px;
background-color: transparent;
- color: #495057;
+ color: var(--text-secondary);
font-size: 0.85em;
font-weight: 500;
cursor: pointer;
@@ -104,12 +104,12 @@
}
.filter-toggle.active:hover {
- background-color: #ffffff66;
+ background-color: var(--white-dimmed);
}
/* Color-coded filter buttons */
.filter-toggle[data-type="user"] {
- border-color: #ff9800;
+ border-color: var(--user-color);
border-width: 2px;
}
@@ -124,12 +124,12 @@
}
.filter-toggle[data-type="assistant"] {
- border-color: #9c27b0;
+ border-color: var(--assistant-color);
border-width: 2px;
}
.filter-toggle[data-type="thinking"] {
- border-color: #9c27b066;
+ border-color: var(--assistant-dimmed);
border-width: 2px;
}
@@ -142,7 +142,7 @@
padding: 4px 8px;
border: 1px solid #dee2e6;
border-radius: 4px;
- background-color: #ffffff66;
+ background-color: var(--white-dimmed);
color: #6c757d;
font-size: 0.75em;
cursor: pointer;
diff --git a/claude_code_log/templates/components/global_styles.css b/claude_code_log/templates/components/global_styles.css
index b9961ed3..393b870c 100644
--- a/claude_code_log/templates/components/global_styles.css
+++ b/claude_code_log/templates/components/global_styles.css
@@ -86,7 +86,7 @@ body {
margin: 0 auto;
padding: 10px;
background: linear-gradient(90deg, #f3d6d2, #f1dcce, #f0e4ca, #eeecc7, #e3ecc3, #d5eac0, #c6e8bd, #b9e6bc, #b6e3c5, #b3e1cf);
- color: #333;
+ color: var(--text-primary);
}
h1 {
@@ -118,6 +118,12 @@ pre {
line-height: 1.5;
}
+/* Summary stats layout (used in index.html) */
+.summary-stats-flex {
+ display: flex;
+ gap: 3em;
+}
+
/* Common card styling */
.card-base {
background-color: #ffffff66;
@@ -166,7 +172,7 @@ pre {
/* Timestamps */
.timestamp {
font-size: 0.85em;
- color: #666;
+ color: var(--text-muted);
font-weight: normal;
}
@@ -174,8 +180,8 @@ pre {
.floating-btn {
position: fixed;
right: 20px;
- background-color: #e8f4fd66;
- color: #666;
+ background-color: var(--session-bg-dimmed);
+ color: var(--text-muted);
border: none;
border-radius: 50%;
width: 50px;
@@ -198,7 +204,7 @@ pre {
}
.floating-btn:visited {
- color: #666;
+ color: var(--text-muted);
}
/* Floating buttons positioning */
diff --git a/claude_code_log/templates/components/message_styles.css b/claude_code_log/templates/components/message_styles.css
index 7cbd3a2e..dec81577 100644
--- a/claude_code_log/templates/components/message_styles.css
+++ b/claude_code_log/templates/components/message_styles.css
@@ -159,7 +159,7 @@
}
.fold-bar[data-border-color="session-header"] .fold-bar-section {
- border-bottom-color: #2196f3;
+ border-bottom-color: var(--system-warning-color);
}
/* Sidechain (sub-assistant) fold-bar styling */
@@ -255,7 +255,7 @@
.pair-duration {
font-size: 80%;
- color: #666;
+ color: var(--text-muted);
font-style: italic;
}
@@ -297,7 +297,7 @@
/* Message type styling */
.user {
- border-left-color: #ff9800;
+ border-left-color: var(--user-color);
}
/* Steering user messages (out-of-band input while agent is working) */
@@ -313,7 +313,7 @@
}
.assistant {
- border-left-color: #9c27b0;
+ border-left-color: var(--assistant-color);
}
/* Dimmed assistant when paired with thinking */
@@ -358,7 +358,7 @@
line-height: 1.4;
white-space: pre-wrap;
word-wrap: break-word;
- color: #333;
+ color: var(--text-primary);
overflow-x: auto;
}
@@ -374,11 +374,11 @@
/* Bash command styling */
.bash-input {
background-color: #1e1e1e08;
- border-left-color: #4caf50;
+ border-left-color: var(--tool-use-color);
}
.bash-prompt {
- color: #4caf50;
+ color: var(--tool-use-color);
font-weight: bold;
font-size: 1.1em;
margin-right: 8px;
@@ -388,7 +388,7 @@
font-family: var(--font-monospace);
font-size: 0.95em;
color: #2c3e50;
- background-color: #f8f9fa;
+ background-color: var(--bg-neutral);
padding: 2px 6px;
border-radius: 3px;
}
@@ -410,7 +410,7 @@
line-height: 1.4;
white-space: pre-wrap;
word-wrap: break-word;
- color: #333;
+ color: var(--text-primary);
overflow-x: auto;
}
@@ -430,7 +430,7 @@
}
.bash-empty {
- color: #999;
+ color: var(--text-muted);
font-style: italic;
}
@@ -459,7 +459,7 @@
}
.tool_use {
- border-left-color: #4caf50;
+ border-left-color: var(--tool-use-color);
}
.tool_result {
@@ -499,7 +499,7 @@
/* Full purple when thinking is paired (as pair_first) */
.thinking.paired-message.pair_first {
- border-left-color: #9c27b0;
+ border-left-color: var(--assistant-color);
}
.image {
@@ -525,10 +525,16 @@
font-size: 1.2em;
}
+.session-subtitle {
+ font-size: 0.9em;
+ color: var(--text-muted);
+ margin-top: 4px;
+}
+
/* IDE notification styling */
.ide-notification {
background-color: var(--ide-notification-dimmed);
- border-left: #9c27b0 2px solid;
+ border-left: var(--assistant-color) 2px solid;
padding: 8px 12px;
margin: 8px 0;
border-radius: 4px;
@@ -548,13 +554,13 @@
}
.ide-selection-collapsible summary:hover {
- color: #333;
+ color: var(--text-primary);
}
.ide-selection-content {
margin-top: 8px;
padding: 8px;
- background-color: #f8f9fa;
+ background-color: var(--bg-neutral);
border-radius: 3px;
border: 1px solid #dee2e6;
font-family: var(--font-monospace);
@@ -633,7 +639,7 @@ pre > code {
.tool-param-structured {
margin: 0;
- background-color: #f8f9fa;
+ background-color: var(--bg-neutral);
padding: 4px;
border-radius: 3px;
}
@@ -648,7 +654,7 @@ pre > code {
}
.tool-param-collapsible summary:hover {
- color: #333;
+ color: var(--text-primary);
}
.tool-param-collapsible[open] > summary {
@@ -661,7 +667,7 @@ pre > code {
}
.tool-params-empty {
- color: #999;
+ color: var(--text-muted);
font-style: italic;
}
@@ -841,4 +847,14 @@ details summary {
.ansi-bold { font-weight: bold; }
.ansi-dim { opacity: 0.7; }
.ansi-italic { font-style: italic; }
-.ansi-underline { text-decoration: underline; }
\ No newline at end of file
+.ansi-underline { text-decoration: underline; }
+
+/* Image styling */
+.tool-result-image,
+.uploaded-image {
+ max-width: 100%;
+ height: auto;
+ border: 1px solid var(--border-light);
+ border-radius: 4px;
+ margin: 10px 0;
+}
\ No newline at end of file
diff --git a/claude_code_log/templates/components/project_card_styles.css b/claude_code_log/templates/components/project_card_styles.css
index 21fde152..ebae9931 100644
--- a/claude_code_log/templates/components/project_card_styles.css
+++ b/claude_code_log/templates/components/project_card_styles.css
@@ -30,15 +30,20 @@
.project-name a {
text-decoration: none;
- color: #2196f3;
+ color: var(--system-warning-color);
}
.project-name a:hover {
text-decoration: underline;
}
+.transcript-link-hint {
+ font-size: 0.6em;
+ color: var(--text-muted);
+}
+
.project-stats {
- color: #666;
+ color: var(--text-muted);
font-size: 0.9em;
display: flex;
gap: 20px;
@@ -79,11 +84,11 @@
.summary-stat .number {
font-size: 1.5em;
font-weight: 600;
- color: #2196f3;
+ color: var(--system-warning-color);
}
.summary-stat .label {
- color: #666;
+ color: var(--text-muted);
font-size: 0.9em;
}
@@ -94,14 +99,14 @@
.project-sessions details summary {
cursor: pointer;
- color: #666;
+ color: var(--text-muted);
font-size: 1.1em;
font-weight: 600;
padding: 8px 0;
}
.project-sessions details summary:hover {
- color: #2196f3;
+ color: var(--system-warning-color);
}
.project-sessions details[open] summary {
diff --git a/claude_code_log/templates/components/search_styles.css b/claude_code_log/templates/components/search_styles.css
index 83fe6540..d73e7aed 100644
--- a/claude_code_log/templates/components/search_styles.css
+++ b/claude_code_log/templates/components/search_styles.css
@@ -10,7 +10,7 @@
right: 45px;
top: 50%;
transform: translateY(-50%);
- color: #999;
+ color: var(--text-muted);
font-size: 0.75em;
pointer-events: none;
transition: opacity 0.2s;
@@ -45,7 +45,7 @@
background: #ffffff88;
border: 1px solid #dee2e6;
border-radius: 20px;
- color: #495057;
+ color: var(--text-secondary);
font-size: 0.85em;
font-family: inherit;
transition: all 0.2s;
@@ -53,13 +53,13 @@
.search-input:focus {
outline: none;
- border-color: #2196f3;
+ border-color: var(--system-warning-color);
background: #ffffff99;
box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.2);
}
.search-input::placeholder {
- color: #666;
+ color: var(--text-muted);
}
.search-clear {
@@ -67,7 +67,7 @@
right: 15px;
background: none;
border: none;
- color: #666;
+ color: var(--text-muted);
cursor: pointer;
font-size: 18px;
padding: 5px;
@@ -77,8 +77,8 @@
}
.search-clear:hover {
- color: #333;
- background: #ffffff66;
+ color: var(--text-primary);
+ background: var(--white-dimmed);
}
.search-clear.visible {
@@ -89,7 +89,7 @@
.search-results-info {
margin-top: 8px;
font-size: 12px;
- color: #666;
+ color: var(--text-muted);
display: none;
}
@@ -117,11 +117,11 @@
align-items: center;
gap: 4px;
cursor: pointer;
- color: #666;
+ color: var(--text-muted);
}
.search-option-inline:hover {
- color: #333;
+ color: var(--text-primary);
}
.search-option-inline input[type="checkbox"] {
@@ -133,7 +133,7 @@
background: #ffffff88;
border: 1px solid #dee2e6;
border-radius: 4px;
- color: #333;
+ color: var(--text-primary);
padding: 4px 8px;
cursor: pointer;
font-size: 12px;
@@ -142,7 +142,7 @@
.search-nav-btn:hover:not(:disabled) {
background: #ffffff99;
- border-color: #2196f3;
+ border-color: var(--system-warning-color);
transform: translateY(-1px);
}
@@ -176,7 +176,7 @@
display: flex;
align-items: center;
gap: 5px;
- color: #666;
+ color: var(--text-muted);
transition: color 0.2s;
}
@@ -191,18 +191,18 @@
}
.search-option:hover {
- color: #333;
+ color: var(--text-primary);
}
/* Index Page Search Results */
.search-results-panel {
margin: 20px 0;
padding: 20px;
- background-color: #ffffff66;
+ background-color: var(--white-dimmed);
border-radius: 8px;
box-shadow: -7px -7px 10px #eeeeee44, 7px 7px 10px #00000011;
- border-left: #ffffff66 1px solid;
- border-top: #ffffff66 1px solid;
+ border-left: var(--white-dimmed) 1px solid;
+ border-top: var(--white-dimmed) 1px solid;
border-bottom: #00000017 1px solid;
border-right: #00000017 1px solid;
display: none;
@@ -230,7 +230,7 @@
.search-close-btn {
background: none;
border: none;
- color: #666;
+ color: var(--text-muted);
cursor: pointer;
font-size: 20px;
padding: 5px;
@@ -239,8 +239,8 @@
}
.search-close-btn:hover {
- color: #333;
- background: #ffffff66;
+ color: var(--text-primary);
+ background: var(--white-dimmed);
}
.search-result-group {
@@ -259,7 +259,7 @@
.search-result-count {
background: #ffffff88;
- color: #666;
+ color: var(--text-muted);
padding: 2px 8px;
border-radius: 12px;
font-size: 11px;
@@ -295,14 +295,14 @@
.search-result-session {
font-size: 12px;
- color: #666;
+ color: var(--text-muted);
margin-bottom: 5px;
font-weight: 500;
}
.search-result-excerpt {
font-size: 13px;
- color: #495057;
+ color: var(--text-secondary);
line-height: 1.4;
}
@@ -317,7 +317,7 @@
.search-result-meta {
margin-top: 8px;
font-size: 11px;
- color: #666;
+ color: var(--text-muted);
display: flex;
gap: 15px;
padding-top: 5px;
@@ -330,7 +330,7 @@
.search-no-results {
text-align: center;
padding: 30px;
- color: #666;
+ color: var(--text-muted);
font-size: 14px;
background-color: #ffffff44;
border-radius: 6px;
@@ -341,7 +341,7 @@
.search-loading {
text-align: center;
padding: 20px;
- color: #666;
+ color: var(--text-muted);
background-color: #ffffff44;
border-radius: 6px;
}
diff --git a/claude_code_log/templates/components/session_nav.html b/claude_code_log/templates/components/session_nav.html
index 4d970081..99568db2 100644
--- a/claude_code_log/templates/components/session_nav.html
+++ b/claude_code_log/templates/components/session_nav.html
@@ -4,10 +4,10 @@