|
|
@@ -1,93 +1,243 @@
|
|
|
-.chat-wrapper {
|
|
|
+/* 1. Container Setup - Fixed to Viewport */
|
|
|
+.chat-container {
|
|
|
+ display: grid;
|
|
|
+ grid-template-columns: 1fr 1fr;
|
|
|
+ /* Use 100% of the parent tab's height, not vh */
|
|
|
+ height: 100%;
|
|
|
+ width: 100%;
|
|
|
+ overflow: hidden;
|
|
|
+ background-color: #f0f2f5;
|
|
|
+}
|
|
|
+
|
|
|
+/* Ensure the cards take up exactly the height of the container */
|
|
|
+.chat-card,
|
|
|
+.agent-card {
|
|
|
+ display: flex !important;
|
|
|
+ flex-direction: column !important;
|
|
|
+ height: 100% !important;
|
|
|
+ min-height: 0;
|
|
|
+ border-radius: 0 !important;
|
|
|
+}
|
|
|
+
|
|
|
+.message-area,
|
|
|
+.log-area {
|
|
|
+ flex: 1;
|
|
|
+ overflow-y: auto !important;
|
|
|
+ min-height: 0;
|
|
|
+ /* Prevents content from pushing parent height */
|
|
|
+}
|
|
|
+
|
|
|
+.card-header {
|
|
|
+ flex-shrink: 0;
|
|
|
+ /* Header stays at the top */
|
|
|
+ padding: 16px 24px;
|
|
|
display: flex;
|
|
|
- width: 100vw;
|
|
|
- height: 80vh; /* full viewport height minus some margin */
|
|
|
- gap: 12px;
|
|
|
- padding: 12px;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ height: 64px;
|
|
|
box-sizing: border-box;
|
|
|
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
|
|
+}
|
|
|
+
|
|
|
+/* 3. Left Panel: Chat */
|
|
|
+.chat-card {
|
|
|
+ background: #ffffff !important;
|
|
|
+ border-right: 1px solid #e0e0e0 !important;
|
|
|
}
|
|
|
|
|
|
-.panel {
|
|
|
- flex: 1; /* each panel takes equal width */
|
|
|
+/* This is the magic part that fixes your scroll issue */
|
|
|
+.message-area {
|
|
|
+ flex: 1 1 auto;
|
|
|
+ /* Grow and shrink as needed */
|
|
|
+ overflow-y: auto !important;
|
|
|
+ /* Only this part scrolls */
|
|
|
+ min-height: 0;
|
|
|
+ padding: 24px !important;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
+ gap: 16px;
|
|
|
+ background-color: #ffffff;
|
|
|
+}
|
|
|
+
|
|
|
+.input-section {
|
|
|
+ flex-shrink: 0;
|
|
|
+ /* Input stays at the bottom */
|
|
|
+ padding: 16px 24px !important;
|
|
|
+ border-top: 1px solid #f0f0f0;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 12px;
|
|
|
+ margin: 0 !important;
|
|
|
+ /* Material actions sometimes have weird margins */
|
|
|
+}
|
|
|
+
|
|
|
+/* 4. Right Panel: Trace & Logic */
|
|
|
+.agent-card {
|
|
|
+ background: #1e1e1e !important;
|
|
|
+ color: #d4d4d4;
|
|
|
+}
|
|
|
+
|
|
|
+.agent-card .card-header {
|
|
|
+ background: #252526;
|
|
|
+ border-bottom: 1px solid #333;
|
|
|
+}
|
|
|
+
|
|
|
+/* --- Rest of your visual styles remain the same --- */
|
|
|
+
|
|
|
+.message-bubble {
|
|
|
+ max-width: 80%;
|
|
|
+ padding: 12px 16px;
|
|
|
border-radius: 12px;
|
|
|
- box-shadow: 0 6px 16px rgba(0,0,0,0.15);
|
|
|
- background-color: #fafafa;
|
|
|
- overflow: hidden;
|
|
|
+ font-size: 0.95rem;
|
|
|
+ line-height: 1.5;
|
|
|
+}
|
|
|
+
|
|
|
+.message-bubble.user {
|
|
|
+ align-self: flex-end;
|
|
|
+ background-color: #007bff;
|
|
|
+ color: #ffffff;
|
|
|
+ border-bottom-right-radius: 2px;
|
|
|
}
|
|
|
|
|
|
-mat-card-title {
|
|
|
- font-size: 1.4rem;
|
|
|
+.message-bubble.bot {
|
|
|
+ align-self: flex-start;
|
|
|
+ background-color: #f1f3f4;
|
|
|
+ color: #202124;
|
|
|
+ border-bottom-left-radius: 2px;
|
|
|
+}
|
|
|
+
|
|
|
+.timestamp {
|
|
|
+ font-size: 0.7rem;
|
|
|
+ margin-top: 6px;
|
|
|
+ opacity: 0.6;
|
|
|
font-weight: 600;
|
|
|
- text-align: center;
|
|
|
- padding: 12px 0;
|
|
|
- border-bottom: 1px solid #ddd;
|
|
|
+ text-transform: uppercase;
|
|
|
}
|
|
|
|
|
|
-mat-card-content {
|
|
|
+.input-section mat-form-field {
|
|
|
flex: 1;
|
|
|
- overflow-y: auto;
|
|
|
- padding: 12px;
|
|
|
}
|
|
|
|
|
|
-/* Chat messages */
|
|
|
-.messages {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- gap: 12px;
|
|
|
+/* Log Entry Container */
|
|
|
+.log-entry {
|
|
|
+ border-bottom: 1px solid #333;
|
|
|
+ padding: 16px 20px;
|
|
|
+ background: #1e1e1e;
|
|
|
}
|
|
|
|
|
|
-.message {
|
|
|
- padding: 10px 16px;
|
|
|
- border-radius: 20px;
|
|
|
- max-width: 80%;
|
|
|
- word-wrap: break-word;
|
|
|
+/* Individual Sections (Input vs Message) */
|
|
|
+.log-section {
|
|
|
+ margin-top: 12px;
|
|
|
+}
|
|
|
+
|
|
|
+/* Metadata Labels (INPUT, MESSAGE) */
|
|
|
+.log-section .label {
|
|
|
+ display: block;
|
|
|
+ font-family: 'Segoe UI', sans-serif;
|
|
|
+ font-size: 0.65rem;
|
|
|
+ font-weight: 800;
|
|
|
+ color: #888;
|
|
|
+ margin-bottom: 4px;
|
|
|
+ letter-spacing: 1px;
|
|
|
+}
|
|
|
+
|
|
|
+/* Code block for raw input data */
|
|
|
+.code-block {
|
|
|
+ margin: 0;
|
|
|
+ font-family: 'Fira Code', 'Consolas', monospace;
|
|
|
+ font-size: 0.8rem;
|
|
|
+ background: #121212;
|
|
|
+ color: #9cdcfe;
|
|
|
+ padding: 8px;
|
|
|
+ border-radius: 4px;
|
|
|
+ border: 1px solid #333;
|
|
|
+ overflow-x: auto;
|
|
|
white-space: pre-wrap;
|
|
|
+ /* Wraps long JSON strings */
|
|
|
+}
|
|
|
+
|
|
|
+/* Text block for human-readable messages */
|
|
|
+.message-text {
|
|
|
+ font-family: 'Segoe UI', sans-serif;
|
|
|
+ font-size: 0.9rem;
|
|
|
line-height: 1.4;
|
|
|
+ color: #d4d4d4;
|
|
|
+ padding-left: 4px;
|
|
|
}
|
|
|
|
|
|
-.user {
|
|
|
- background-color: #1976d2;
|
|
|
- color: white;
|
|
|
- align-self: flex-end;
|
|
|
- text-align: right;
|
|
|
+/* Logic Status Pilling */
|
|
|
+.status-pill.completed {
|
|
|
+ background: #2e7d32;
|
|
|
+ color: #fff;
|
|
|
}
|
|
|
|
|
|
-.bot {
|
|
|
- background-color: #e0e0e0;
|
|
|
- color: #333;
|
|
|
- align-self: flex-start;
|
|
|
- text-align: left;
|
|
|
+.status-pill.processing {
|
|
|
+ background: #e65100;
|
|
|
+ color: #fff;
|
|
|
}
|
|
|
|
|
|
-.bot-typing {
|
|
|
- font-style: italic;
|
|
|
- color: #666;
|
|
|
+.status-pill.error {
|
|
|
+ background: #c62828;
|
|
|
+ color: #fff;
|
|
|
}
|
|
|
|
|
|
-/* Chat input */
|
|
|
-.chat-input {
|
|
|
- display: flex;
|
|
|
- gap: 10px;
|
|
|
+.node-badge {
|
|
|
+ font-family: 'Roboto Mono', monospace;
|
|
|
+ font-size: 0.75rem;
|
|
|
+ color: #4ec9b0;
|
|
|
+ background: rgba(78, 201, 176, 0.1);
|
|
|
+ padding: 4px 8px;
|
|
|
+ border-radius: 4px;
|
|
|
+}
|
|
|
+
|
|
|
+.log-body {
|
|
|
+ margin-top: 10px;
|
|
|
+ font-family: 'Fira Code', monospace;
|
|
|
+ font-size: 0.85rem;
|
|
|
+ color: #9cdcfe;
|
|
|
+ background: #121212;
|
|
|
padding: 12px;
|
|
|
- border-top: 1px solid #ddd;
|
|
|
- background-color: #f5f5f5;
|
|
|
+ border-radius: 6px;
|
|
|
+ white-space: pre-wrap;
|
|
|
}
|
|
|
|
|
|
-.chat-input mat-form-field {
|
|
|
- flex: 1;
|
|
|
- margin: 0;
|
|
|
+.typing-indicator {
|
|
|
+ display: flex;
|
|
|
+ gap: 4px;
|
|
|
+ padding: 8px;
|
|
|
}
|
|
|
|
|
|
-/* JSON output pre blocks */
|
|
|
-pre {
|
|
|
- white-space: pre-wrap;
|
|
|
- word-break: break-word;
|
|
|
- font-size: 0.85rem;
|
|
|
- background-color: #f5f5f5;
|
|
|
- padding: 10px;
|
|
|
- border-radius: 8px;
|
|
|
- max-height: 100%;
|
|
|
- overflow: auto;
|
|
|
+.typing-indicator span {
|
|
|
+ width: 6px;
|
|
|
+ height: 6px;
|
|
|
+ background: #90a4ae;
|
|
|
+ border-radius: 50%;
|
|
|
+ animation: pulse 1.5s infinite;
|
|
|
+}
|
|
|
+
|
|
|
+@keyframes pulse {
|
|
|
+
|
|
|
+ 0%,
|
|
|
+ 100% {
|
|
|
+ transform: translateY(0);
|
|
|
+ opacity: 0.4;
|
|
|
+ }
|
|
|
+
|
|
|
+ 50% {
|
|
|
+ transform: translateY(-4px);
|
|
|
+ opacity: 1;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.log-area::-webkit-scrollbar {
|
|
|
+ width: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+.log-area::-webkit-scrollbar-track {
|
|
|
+ background: #1e1e1e;
|
|
|
}
|
|
|
+
|
|
|
+.log-area::-webkit-scrollbar-thumb {
|
|
|
+ background: #333;
|
|
|
+ border-radius: 4px;
|
|
|
+}
|