Initial commit
diff --git a/loop/webui/src/timeline.css b/loop/webui/src/timeline.css
new file mode 100644
index 0000000..2928c44
--- /dev/null
+++ b/loop/webui/src/timeline.css
@@ -0,0 +1,1306 @@
+body {
+  font-family:
+    system-ui,
+    -apple-system,
+    BlinkMacSystemFont,
+    "Segoe UI",
+    Roboto,
+    sans-serif;
+  margin: 0;
+  padding: 20px;
+  padding-top: 80px; /* Added padding to account for the fixed top banner */
+  padding-bottom: 100px; /* Adjusted padding for chat container */
+  color: #333;
+  line-height: 1.4; /* Reduced line height for more compact text */
+}
+
+.timeline-container {
+  max-width: 1200px;
+  margin: 0 auto;
+  position: relative;
+}
+
+/* When diff view is active, allow timeline container to expand to full width */
+.timeline-container.diff-active {
+  max-width: 100%;
+}
+
+/* Top banner with combined elements */
+.top-banner {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 5px 20px;
+  margin-bottom: 0;
+  border-bottom: 1px solid #eee;
+  flex-wrap: wrap;
+  gap: 10px;
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  background: white;
+  z-index: 100;
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+  max-width: 100%;
+}
+
+.banner-title {
+  font-size: 18px;
+  font-weight: 600;
+  margin: 0;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+
+.chat-title {
+  margin: 0;
+  padding: 0;
+  color: rgba(82, 82, 82, 0.85);
+  font-size: 16px;
+  font-weight: normal;
+  font-style: italic;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  max-width: 100%;
+}
+
+/* Original header styles kept for compatibility */
+header {
+  display: none; /* Hidden since we're using top-banner instead */
+}
+
+/* Ensure the container starts below the fixed top banner */
+.timeline-container {
+  padding-top: 10px;
+}
+
+h1 {
+  margin: 0;
+  font-size: 24px;
+  font-weight: 600;
+}
+
+.info-card {
+  background: #f9f9f9;
+  border-radius: 8px;
+  padding: 15px;
+  margin-bottom: 20px;
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
+  display: none; /* Hidden in the combined layout */
+}
+
+.info-grid {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 8px;
+  background: #f9f9f9;
+  border-radius: 4px;
+  padding: 4px 10px;
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
+  flex: 1;
+}
+
+.info-item {
+  display: flex;
+  align-items: center;
+  white-space: nowrap;
+  margin-right: 10px;
+  font-size: 13px;
+}
+
+.info-label {
+  font-size: 11px;
+  color: #555;
+  margin-right: 3px;
+  font-weight: 500;
+}
+
+.info-value {
+  font-size: 11px;
+  font-weight: 600;
+}
+
+.cost {
+  color: #2e7d32;
+}
+
+.refresh-control {
+  display: flex;
+  align-items: center;
+  margin-bottom: 0;
+  flex-wrap: nowrap;
+  white-space: nowrap;
+  flex-shrink: 0;
+}
+
+.refresh-button {
+  background: #4caf50;
+  color: white;
+  border: none;
+  padding: 4px 10px;
+  border-radius: 4px;
+  cursor: pointer;
+  font-size: 12px;
+  margin: 5px;
+}
+
+.poll-updates {
+  display: flex;
+  align-items: center;
+  margin: 0 5px;
+  font-size: 12px;
+}
+
+.status-container {
+  display: flex;
+  align-items: center;
+}
+
+.polling-indicator {
+  display: inline-block;
+  width: 8px;
+  height: 8px;
+  border-radius: 50%;
+  margin-right: 4px;
+  background-color: #ccc;
+}
+
+.polling-indicator.active {
+  background-color: #4caf50;
+  animation: pulse 1.5s infinite;
+}
+
+.polling-indicator.error {
+  background-color: #f44336;
+  animation: pulse 1.5s infinite;
+}
+
+@keyframes pulse {
+  0% {
+    opacity: 1;
+  }
+  50% {
+    opacity: 0.5;
+  }
+  100% {
+    opacity: 1;
+  }
+}
+
+.status-text {
+  font-size: 11px;
+  color: #666;
+}
+
+/* Timeline styles that should remain unchanged */
+.timeline {
+  position: relative;
+  margin: 10px 0;
+  scroll-behavior: smooth;
+}
+
+.timeline::before {
+  content: "";
+  position: absolute;
+  top: 0;
+  bottom: 0;
+  left: 15px;
+  width: 2px;
+  background: #e0e0e0;
+  border-radius: 1px;
+}
+
+/* Hide the timeline vertical line when there are no messages */
+.timeline.empty::before {
+  display: none;
+}
+
+.message {
+  position: relative;
+  margin-bottom: 5px;
+  padding-left: 30px;
+}
+
+.message-icon {
+  position: absolute;
+  left: 10px;
+  top: 0;
+  transform: translateX(-50%);
+  width: 16px;
+  height: 16px;
+  border-radius: 3px;
+  text-align: center;
+  line-height: 16px;
+  color: #fff;
+  font-size: 10px;
+}
+
+.message-content {
+  position: relative;
+  padding: 5px 10px;
+  background: #fff;
+  border-radius: 3px;
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+  border-left: 3px solid transparent;
+}
+
+/* Removed arrow decoration for a more compact look */
+
+.message-header {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 5px;
+  margin-bottom: 3px;
+  font-size: 12px;
+}
+
+.message-timestamp {
+  font-size: 10px;
+  color: #888;
+  font-style: italic;
+  margin-left: 3px;
+}
+
+.conversation-id {
+  font-family: monospace;
+  font-size: 12px;
+  padding: 2px 4px;
+  background-color: #f0f0f0;
+  border-radius: 3px;
+  margin-left: auto;
+}
+
+.parent-info {
+  font-size: 11px;
+  opacity: 0.8;
+}
+
+.subconversation {
+  border-left: 2px solid transparent;
+  padding-left: 5px;
+  margin-left: 20px;
+  transition: margin-left 0.3s ease;
+}
+
+.message-text {
+  overflow-x: auto;
+  margin-bottom: 3px;
+  font-family: monospace;
+  padding: 3px 5px;
+  background: #f7f7f7;
+  border-radius: 2px;
+  user-select: text;
+  cursor: text;
+  -webkit-user-select: text;
+  -moz-user-select: text;
+  -ms-user-select: text;
+  font-size: 13px;
+  line-height: 1.3;
+}
+
+.tool-details {
+  margin-top: 3px;
+  padding-top: 3px;
+  border-top: 1px dashed #e0e0e0;
+  font-size: 12px;
+}
+
+.tool-name {
+  font-size: 12px;
+  font-weight: bold;
+  margin-bottom: 2px;
+  background: #f0f0f0;
+  padding: 2px 4px;
+  border-radius: 2px;
+  display: flex;
+  align-items: center;
+  gap: 3px;
+}
+
+.tool-input,
+.tool-result {
+  margin-top: 2px;
+  padding: 3px 5px;
+  background: #f7f7f7;
+  border-radius: 2px;
+  font-family: monospace;
+  font-size: 12px;
+  overflow-x: auto;
+  white-space: pre;
+  line-height: 1.3;
+  user-select: text;
+  cursor: text;
+  -webkit-user-select: text;
+  -moz-user-select: text;
+  -ms-user-select: text;
+}
+
+.tool-result {
+  max-height: 300px;
+  overflow-y: auto;
+}
+
+.usage-info {
+  margin-top: 10px;
+  padding-top: 10px;
+  border-top: 1px dashed #e0e0e0;
+  font-size: 12px;
+  color: #666;
+}
+
+/* Message type styles */
+.user .message-icon {
+  background-color: #2196f3;
+}
+
+.agent .message-icon {
+  background-color: #4caf50;
+}
+
+.tool .message-icon {
+  background-color: #ff9800;
+}
+
+.error .message-icon {
+  background-color: #f44336;
+}
+
+.end-of-turn {
+  margin-bottom: 15px;
+}
+
+.end-of-turn::after {
+  content: "End of Turn";
+  position: absolute;
+  left: 15px;
+  bottom: -10px;
+  transform: translateX(-50%);
+  font-size: 10px;
+  color: #666;
+  background: #f0f0f0;
+  padding: 1px 4px;
+  border-radius: 3px;
+}
+
+.collapsible {
+  cursor: pointer;
+  background-color: #f0f0f0;
+  padding: 5px 10px;
+  border: none;
+  border-radius: 4px;
+  text-align: left;
+  font-size: 12px;
+  margin-top: 5px;
+}
+
+.collapsed {
+  max-height: 50px;
+  overflow-y: hidden;
+  position: relative;
+  text-overflow: ellipsis;
+}
+
+/* Removed the gradient effect */
+
+.loader {
+  display: flex;
+  justify-content: center;
+  padding: 20px;
+}
+
+.loader::after {
+  content: "";
+  width: 30px;
+  height: 30px;
+  border: 3px solid #f3f3f3;
+  border-top: 3px solid #3498db;
+  border-radius: 50%;
+  animation: spin 1s linear infinite;
+}
+
+@keyframes spin {
+  0% {
+    transform: rotate(0deg);
+  }
+  100% {
+    transform: rotate(360deg);
+  }
+}
+
+/* Chat styles */
+.chat-container {
+  position: fixed;
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  background: #f0f0f0;
+  padding: 15px;
+  box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
+  z-index: 1000;
+}
+
+.chat-input-wrapper {
+  display: flex;
+  max-width: 1200px;
+  margin: 0 auto;
+  gap: 10px;
+}
+
+#chatInput {
+  flex: 1;
+  padding: 12px;
+  border: 1px solid #ddd;
+  border-radius: 4px;
+  resize: none;
+  font-family: monospace;
+  font-size: 12px;
+  min-height: 40px;
+  max-height: 120px;
+  background: #f7f7f7;
+}
+
+#sendChatButton {
+  background-color: #2196f3;
+  color: white;
+  border: none;
+  border-radius: 4px;
+  padding: 0 20px;
+  cursor: pointer;
+  font-weight: 600;
+}
+
+#sendChatButton:hover {
+  background-color: #0d8bf2;
+}
+
+/* Copy button styles */
+.message-text-container,
+.tool-result-container {
+  position: relative;
+}
+
+.message-actions {
+  position: absolute;
+  top: 5px;
+  right: 5px;
+  z-index: 10;
+  opacity: 0;
+  transition: opacity 0.2s ease;
+}
+
+.message-text-container:hover .message-actions,
+.tool-result-container:hover .message-actions {
+  opacity: 1;
+}
+
+.copy-button {
+  background-color: rgba(255, 255, 255, 0.9);
+  border: 1px solid #ddd;
+  border-radius: 4px;
+  color: #555;
+  cursor: pointer;
+  font-size: 12px;
+  padding: 2px 8px;
+  transition: all 0.2s ease;
+}
+
+.copy-button:hover {
+  background-color: #f0f0f0;
+  color: #333;
+}
+
+/* Diff View Styles */
+.diff-view {
+  width: 100%;
+  background-color: #f5f5f5;
+  border-radius: 8px;
+  overflow: hidden;
+  margin-bottom: 20px;
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+  display: flex;
+  flex-direction: column;
+}
+
+.diff-tabs {
+  display: flex;
+  background-color: #e0e0e0;
+  border-bottom: 1px solid #ccc;
+}
+
+.diff-tab-button {
+  padding: 8px 16px;
+  border: none;
+  background: none;
+  font-size: 14px;
+  cursor: pointer;
+  outline: none;
+  transition: background-color 0.2s;
+}
+
+.diff-tab-button:hover {
+  background-color: #d0d0d0;
+}
+
+.diff-tab-button.active {
+  background-color: #fff;
+  border-bottom: 2px solid #3498db;
+}
+
+.diff-container {
+  flex: 1;
+  overflow: hidden;
+}
+
+/* Removed diff-header for more space */
+
+.diff-content {
+  padding: 15px;
+  margin: 0;
+  max-height: 70vh;
+  overflow-y: auto;
+  font-family: Consolas, Monaco, "Andale Mono", monospace;
+  font-size: 14px;
+  line-height: 1.5;
+  white-space: pre;
+  tab-size: 4;
+  background-color: #fff;
+}
+
+.diff-content .diff-line {
+  padding: 0 5px;
+  white-space: pre;
+  cursor: pointer;
+  transition: background-color 0.2s;
+}
+
+.diff-content .diff-line:hover {
+  background-color: #e6f7ff;
+}
+
+.diff-content .diff-add {
+  background-color: #e6ffed;
+  color: #22863a;
+}
+
+.diff-content .diff-remove {
+  background-color: #ffeef0;
+  color: #cb2431;
+}
+
+.diff-content .diff-info {
+  color: #6a737d;
+  background-color: #f0f0f0;
+}
+
+.diff-comment-box {
+  position: fixed;
+  left: 50%;
+  top: 50%;
+  transform: translate(-50%, -50%);
+  width: 80%;
+  max-width: 600px;
+  background-color: #fff;
+  padding: 20px;
+  border-radius: 8px;
+  box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
+  z-index: 1000;
+}
+
+.diff-comment-box h3 {
+  margin-top: 0;
+  margin-bottom: 15px;
+  font-size: 18px;
+}
+
+.selected-line {
+  background-color: #f5f5f5;
+  padding: 10px;
+  margin-bottom: 15px;
+  border-radius: 4px;
+  border-left: 3px solid #0366d6;
+}
+
+.selected-line pre {
+  margin: 5px 0 0 0;
+  white-space: pre-wrap;
+  word-wrap: break-word;
+  font-family: Consolas, Monaco, "Andale Mono", monospace;
+  font-size: 14px;
+}
+
+#diffCommentInput {
+  width: 100%;
+  min-height: 100px;
+  padding: 10px;
+  margin-bottom: 15px;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+  resize: vertical;
+  font-family: Arial, sans-serif;
+}
+
+.diff-comment-buttons {
+  display: flex;
+  justify-content: flex-end;
+  gap: 10px;
+}
+
+.diff-comment-buttons button {
+  padding: 8px 15px;
+  border: none;
+  border-radius: 4px;
+  cursor: pointer;
+  font-weight: 500;
+}
+
+#submitDiffComment {
+  background-color: #0366d6;
+  color: white;
+}
+
+#submitDiffComment:hover {
+  background-color: #0256bd;
+}
+
+#cancelDiffComment {
+  background-color: #e1e4e8;
+  color: #24292e;
+}
+
+#cancelDiffComment:hover {
+  background-color: #d1d5da;
+}
+
+/* View Mode Button Styles */
+.view-mode-buttons {
+  display: flex;
+  gap: 8px;
+  margin-right: 10px;
+}
+
+.emoji-button {
+  font-size: 18px;
+  width: 32px;
+  height: 32px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  background: white;
+  border: 1px solid #ddd;
+  border-radius: 4px;
+  cursor: pointer;
+  transition: all 0.2s ease;
+  padding: 0;
+  line-height: 1;
+}
+
+.emoji-button:hover {
+  background-color: #f0f0f0;
+  transform: translateY(-2px);
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+}
+
+.emoji-button.active {
+  background-color: #e6f7ff;
+  border-color: #1890ff;
+  color: #1890ff;
+}
+
+#showConversationButton.active {
+  background-color: #e6f7ff;
+  border-color: #1890ff;
+}
+
+#showDiffButton.active {
+  background-color: #f6ffed;
+  border-color: #52c41a;
+}
+
+#showChartsButton.active {
+  background-color: #fff2e8;
+  border-color: #fa8c16;
+}
+
+.stop-button:hover {
+  background-color: #c82333 !important;
+}
+
+/* Chart View Styles */
+.chart-view {
+  width: 100%;
+  background-color: #ffffff;
+  border-radius: 8px;
+  overflow: hidden;
+  margin-bottom: 20px;
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+  padding: 15px;
+}
+
+.chart-container {
+  width: 100%;
+  height: auto;
+  overflow: auto;
+}
+
+.chart-section {
+  margin-bottom: 30px;
+  border-bottom: 1px solid #eee;
+  padding-bottom: 20px;
+}
+
+/* Terminal View Styles */
+.terminal-view {
+  width: 100%;
+  background-color: #f5f5f5;
+  border-radius: 8px;
+  overflow: hidden;
+  margin-bottom: 20px;
+  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
+  padding: 15px;
+  height: 70vh;
+}
+
+.terminal-container {
+  width: 100%;
+  height: 100%;
+  overflow: hidden;
+}
+
+#showTerminalButton.active {
+  background-color: #fef0f0;
+  border-color: #ff4d4f;
+}
+
+.chart-section:last-child {
+  border-bottom: none;
+  margin-bottom: 0;
+}
+
+.chart-section h3 {
+  margin-top: 0;
+  margin-bottom: 15px;
+  font-size: 18px;
+  color: #333;
+}
+
+#costChart,
+#messagesChart {
+  width: 100%;
+  min-height: 300px;
+  margin-bottom: 10px;
+}
+
+/* Tool calls container styles */
+.tool-calls-container {
+  /* Removed dotted border */
+}
+
+.tool-calls-toggle {
+  cursor: pointer;
+  background-color: #f0f0f0;
+  padding: 5px 10px;
+  border: none;
+  border-radius: 4px;
+  text-align: left;
+  font-size: 12px;
+  margin-top: 5px;
+  color: #555;
+  font-weight: 500;
+}
+
+.tool-calls-toggle:hover {
+  background-color: #e0e0e0;
+}
+
+.tool-calls-details {
+  margin-top: 10px;
+  transition: max-height 0.3s ease;
+}
+
+.tool-calls-details.collapsed {
+  max-height: 0;
+  overflow: hidden;
+  margin-top: 0;
+}
+
+.tool-call {
+  background: #f9f9f9;
+  border-radius: 4px;
+  padding: 10px;
+  margin-bottom: 10px;
+  border-left: 3px solid #4caf50;
+}
+
+.tool-call-header {
+  margin-bottom: 8px;
+  font-size: 14px;
+  padding: 2px 0;
+}
+
+/* Compact tool display styles */
+.tool-compact-line {
+  font-family: monospace;
+  font-size: 12px;
+  line-height: 1.4;
+  padding: 4px 6px;
+  background: #f8f8f8;
+  border-radius: 3px;
+  position: relative;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  max-width: 100%;
+  display: flex;
+  align-items: center;
+}
+
+.tool-result-inline {
+  font-family: monospace;
+  color: #0066bb;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  max-width: 400px;
+  display: inline-block;
+  vertical-align: middle;
+}
+
+.copy-inline-button {
+  font-size: 10px;
+  padding: 2px 4px;
+  margin-left: 8px;
+  background: #eee;
+  border: none;
+  border-radius: 3px;
+  cursor: pointer;
+  opacity: 0.7;
+}
+
+.copy-inline-button:hover {
+  opacity: 1;
+  background: #ddd;
+}
+
+.tool-input.compact,
+.tool-result.compact {
+  margin: 2px 0;
+  padding: 4px;
+  font-size: 12px;
+}
+
+/* Removed old compact container CSS */
+
+/* Ultra-compact tool call box styles */
+.tool-calls-header {
+  /* Empty header - just small spacing */
+}
+
+.tool-call-boxes-row {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 8px;
+  margin-bottom: 8px;
+}
+
+.tool-call-wrapper {
+  display: flex;
+  flex-direction: column;
+  margin-bottom: 4px;
+}
+
+.tool-call-box {
+  display: inline-flex;
+  align-items: center;
+  background: #f0f0f0;
+  border-radius: 4px;
+  padding: 3px 8px;
+  font-size: 12px;
+  cursor: pointer;
+  max-width: 320px;
+  position: relative;
+  border: 1px solid #ddd;
+  transition: background-color 0.2s;
+}
+
+.tool-call-box:hover {
+  background-color: #e8e8e8;
+}
+
+.tool-call-box.expanded {
+  background-color: #e0e0e0;
+  border-bottom-left-radius: 0;
+  border-bottom-right-radius: 0;
+  border-bottom: 1px solid #ccc;
+}
+
+.tool-call-name {
+  font-weight: bold;
+  margin-right: 6px;
+  color: #444;
+}
+
+.tool-call-input {
+  color: #666;
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  font-family: monospace;
+  font-size: 11px;
+}
+
+/* Removed old expanded view CSS */
+
+/* Custom styles for IRC-like experience */
+.user .message-content {
+  border-left-color: #2196f3;
+}
+
+.agent .message-content {
+  border-left-color: #4caf50;
+}
+
+.tool .message-content {
+  border-left-color: #ff9800;
+}
+
+.error .message-content {
+  border-left-color: #f44336;
+}
+
+/* Make message type display bold but without the IRC-style markers */
+.message-type {
+  font-weight: bold;
+}
+
+/* Tool call cards */
+.tool-call-cards-container {
+  display: flex;
+  flex-direction: column;
+  gap: 8px;
+  margin-top: 8px;
+}
+
+/* Commit message styling */
+.message.commit {
+  background-color: #f0f7ff;
+  border-left: 4px solid #0366d6;
+}
+
+.commits-container {
+  margin-top: 10px;
+  padding: 5px;
+}
+
+.commits-header {
+  font-weight: bold;
+  margin-bottom: 5px;
+  color: #24292e;
+}
+
+.commit-boxes-row {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 8px;
+  margin-top: 8px;
+}
+
+.tool-call-card {
+  display: flex;
+  flex-direction: column;
+  border: 1px solid #ddd;
+  border-radius: 6px;
+  background-color: #f9f9f9;
+  overflow: hidden;
+  cursor: pointer;
+}
+
+/* Compact view (default) */
+.tool-call-compact-view {
+  display: flex;
+  align-items: center;
+  padding: 0px 6px;
+  gap: 8px;
+  background-color: #f9f9f9;
+  font-size: 0.9em;
+  white-space: nowrap;
+  overflow: visible; /* Don't hide overflow, we'll handle text truncation per element */
+  position: relative; /* For positioning the expand icon */
+}
+
+/* Expanded view (hidden by default) */
+.tool-call-card.collapsed .tool-call-expanded-view {
+  display: none;
+}
+
+.tool-call-expanded-view {
+  display: flex;
+  flex-direction: column;
+  border-top: 1px solid #eee;
+}
+
+.tool-call-header {
+  display: flex;
+  align-items: center;
+  justify-content: space-between;
+  padding: 6px 10px;
+  background-color: #f0f0f0;
+  border-bottom: 1px solid #ddd;
+  font-weight: bold;
+}
+
+.tool-call-name {
+  font-family: var(--monospace-font);
+  color: #0066cc;
+  font-weight: bold;
+}
+
+.tool-call-status {
+  margin-right: 4px;
+  min-width: 1em;
+  text-align: center;
+}
+
+.tool-call-status.spinner {
+  animation: spin 1s infinite linear;
+  display: inline-block;
+  width: 1em;
+}
+
+.tool-call-time {
+  margin-left: 8px;
+  font-size: 0.85em;
+  color: #666;
+  font-weight: normal;
+}
+
+.tool-call-input-preview {
+  color: #555;
+  font-family: var(--monospace-font);
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  max-width: 30%;
+  background-color: rgba(240, 240, 240, 0.5);
+  padding: 2px 5px;
+  border-radius: 3px;
+  font-size: 0.9em;
+}
+
+.tool-call-result-preview {
+  color: #28a745;
+  font-family: var(--monospace-font);
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  max-width: 40%;
+  background-color: rgba(240, 248, 240, 0.5);
+  padding: 2px 5px;
+  border-radius: 3px;
+  font-size: 0.9em;
+}
+
+.tool-call-expand-icon {
+  position: absolute;
+  right: 10px;
+  font-size: 0.8em;
+  color: #888;
+}
+
+.tool-call-input {
+  padding: 6px 10px;
+  border-bottom: 1px solid #eee;
+  font-family: var(--monospace-font);
+  font-size: 0.9em;
+  white-space: pre-wrap;
+  word-break: break-all;
+  background-color: #f5f5f5;
+}
+
+.tool-call-result {
+  padding: 6px 10px;
+  font-family: var(--monospace-font);
+  font-size: 0.9em;
+  white-space: pre-wrap;
+  max-height: 300px;
+  overflow-y: auto;
+}
+
+.tool-call-result pre {
+  margin: 0;
+  white-space: pre-wrap;
+}
+
+@keyframes spin {
+  0% {
+    transform: rotate(0deg);
+  }
+  100% {
+    transform: rotate(360deg);
+  }
+}
+
+/* Standalone tool messages (legacy/disconnected) */
+.tool-details.standalone .tool-header {
+  border-radius: 4px;
+  background-color: #fff3cd;
+  border-color: #ffeeba;
+}
+
+.tool-details.standalone .tool-warning {
+  margin-left: 10px;
+  font-size: 0.85em;
+  color: #856404;
+  font-style: italic;
+}
+
+/* Tool call expanded view with sections */
+.tool-call-section {
+  border-bottom: 1px solid #eee;
+}
+
+.tool-call-section:last-child {
+  border-bottom: none;
+}
+
+.tool-call-section-label {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  padding: 8px 10px;
+  background-color: #f5f5f5;
+  font-weight: bold;
+  font-size: 0.9em;
+}
+
+.tool-call-section-content {
+  padding: 0;
+}
+
+.tool-call-copy-btn {
+  background-color: #f0f0f0;
+  border: 1px solid #ddd;
+  border-radius: 4px;
+  padding: 2px 8px;
+  font-size: 0.8em;
+  cursor: pointer;
+  transition: background-color 0.2s;
+}
+
+.tool-call-copy-btn:hover {
+  background-color: #e0e0e0;
+}
+
+/* Override for tool call input in expanded view */
+.tool-call-section-content .tool-call-input {
+  margin: 0;
+  padding: 8px 10px;
+  border: none;
+  background-color: #fff;
+  max-height: 300px;
+  overflow-y: auto;
+}
+
+.title-container {
+  display: flex;
+  flex-direction: column;
+  max-width: 33%;
+  overflow: hidden;
+}
+
+.commit-box {
+  border: 1px solid #d1d5da;
+  border-radius: 4px;
+  overflow: hidden;
+  background-color: #ffffff;
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
+  max-width: 100%;
+  display: flex;
+  flex-direction: column;
+}
+
+.commit-preview {
+  padding: 8px 12px;
+  cursor: pointer;
+  font-family: monospace;
+  background-color: #f6f8fa;
+  border-bottom: 1px dashed #d1d5da;
+}
+
+.commit-preview:hover {
+  background-color: #eef2f6;
+}
+
+.commit-hash {
+  color: #0366d6;
+  font-weight: bold;
+}
+
+.commit-details {
+  padding: 8px 12px;
+  max-height: 200px;
+  overflow-y: auto;
+}
+
+.commit-details pre {
+  margin: 0;
+  white-space: pre-wrap;
+  word-break: break-word;
+}
+
+.commit-details.is-hidden {
+  display: none;
+}
+
+.pushed-branch {
+  color: #28a745;
+  font-weight: 500;
+  margin-left: 6px;
+}
+
+.commit-diff-button {
+  padding: 6px 12px;
+  border: 1px solid #ccc;
+  border-radius: 3px;
+  background-color: #f7f7f7;
+  color: #24292e;
+  font-size: 12px;
+  cursor: pointer;
+  transition: all 0.2s ease;
+  margin: 8px 12px;
+  display: block;
+}
+
+.commit-diff-button:hover {
+  background-color: #e7e7e7;
+  border-color: #aaa;
+}
+
+/* Hide views initially to prevent flash of content */
+.timeline-container .timeline,
+.timeline-container .diff-view,
+.timeline-container .chart-view,
+.timeline-container .terminal-view {
+  visibility: hidden;
+}
+
+/* Will be set by JavaScript once we know which view to display */
+.timeline-container.view-initialized .timeline,
+.timeline-container.view-initialized .diff-view,
+.timeline-container.view-initialized .chart-view,
+.timeline-container.view-initialized .terminal-view {
+  visibility: visible;
+}
+
+.markdown-content {
+  box-sizing: border-box;
+  min-width: 200px;
+  margin: 0 auto;
+}
+
+.markdown-content p {
+  margin-block-start: 0.5em;
+  margin-block-end: 0.5em
+}
\ No newline at end of file