|
@@ -1,15 +1,15 @@
|
|
|
-/* 1. Container Setup - Fixed to Viewport */
|
|
|
|
|
|
|
+/* 1. Container & Layout Root */
|
|
|
.chat-container {
|
|
.chat-container {
|
|
|
display: grid;
|
|
display: grid;
|
|
|
grid-template-columns: 1fr 1fr;
|
|
grid-template-columns: 1fr 1fr;
|
|
|
- /* Use 100% of the parent tab's height, not vh */
|
|
|
|
|
height: 100%;
|
|
height: 100%;
|
|
|
width: 100%;
|
|
width: 100%;
|
|
|
overflow: hidden;
|
|
overflow: hidden;
|
|
|
background-color: #f0f2f5;
|
|
background-color: #f0f2f5;
|
|
|
|
|
+ font-family: 'Segoe UI', Roboto, sans-serif;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/* Ensure the cards take up exactly the height of the container */
|
|
|
|
|
|
|
+/* 2. Universal Panel & Header Styles */
|
|
|
.chat-card,
|
|
.chat-card,
|
|
|
.agent-card {
|
|
.agent-card {
|
|
|
display: flex !important;
|
|
display: flex !important;
|
|
@@ -17,40 +17,34 @@
|
|
|
height: 100% !important;
|
|
height: 100% !important;
|
|
|
min-height: 0;
|
|
min-height: 0;
|
|
|
border-radius: 0 !important;
|
|
border-radius: 0 !important;
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-.message-area,
|
|
|
|
|
-.log-area {
|
|
|
|
|
- flex: 1;
|
|
|
|
|
- overflow-y: auto !important;
|
|
|
|
|
- min-height: 0;
|
|
|
|
|
- /* Prevents content from pushing parent height */
|
|
|
|
|
|
|
+ box-shadow: none !important;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.card-header {
|
|
.card-header {
|
|
|
- flex-shrink: 0;
|
|
|
|
|
- /* Header stays at the top */
|
|
|
|
|
- padding: 16px 24px;
|
|
|
|
|
|
|
+ flex: 0 0 64px;
|
|
|
|
|
+ padding: 0 24px;
|
|
|
display: flex;
|
|
display: flex;
|
|
|
align-items: center;
|
|
align-items: center;
|
|
|
justify-content: space-between;
|
|
justify-content: space-between;
|
|
|
- height: 64px;
|
|
|
|
|
box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
|
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
|
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/* 3. Left Panel: Chat */
|
|
|
|
|
|
|
+.card-header h2 {
|
|
|
|
|
+ margin: 0;
|
|
|
|
|
+ font-size: 1.1rem;
|
|
|
|
|
+ font-weight: 600;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+/* 3. Left Panel: Chat Section */
|
|
|
.chat-card {
|
|
.chat-card {
|
|
|
background: #ffffff !important;
|
|
background: #ffffff !important;
|
|
|
border-right: 1px solid #e0e0e0 !important;
|
|
border-right: 1px solid #e0e0e0 !important;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/* This is the magic part that fixes your scroll issue */
|
|
|
|
|
.message-area {
|
|
.message-area {
|
|
|
- flex: 1 1 auto;
|
|
|
|
|
- /* Grow and shrink as needed */
|
|
|
|
|
|
|
+ flex: 1;
|
|
|
overflow-y: auto !important;
|
|
overflow-y: auto !important;
|
|
|
- /* Only this part scrolls */
|
|
|
|
|
min-height: 0;
|
|
min-height: 0;
|
|
|
padding: 24px !important;
|
|
padding: 24px !important;
|
|
|
display: flex;
|
|
display: flex;
|
|
@@ -59,31 +53,6 @@
|
|
|
background-color: #ffffff;
|
|
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 {
|
|
.message-bubble {
|
|
|
max-width: 80%;
|
|
max-width: 80%;
|
|
|
padding: 12px 16px;
|
|
padding: 12px 16px;
|
|
@@ -114,71 +83,72 @@
|
|
|
text-transform: uppercase;
|
|
text-transform: uppercase;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+.input-section {
|
|
|
|
|
+ flex: 0 0 auto;
|
|
|
|
|
+ padding: 16px 24px !important;
|
|
|
|
|
+ border-top: 1px solid #f0f0f0;
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ gap: 12px;
|
|
|
|
|
+ background: white;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
.input-section mat-form-field {
|
|
.input-section mat-form-field {
|
|
|
flex: 1;
|
|
flex: 1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/* Log Entry Container */
|
|
|
|
|
-.log-entry {
|
|
|
|
|
- border-bottom: 1px solid #333;
|
|
|
|
|
- padding: 16px 20px;
|
|
|
|
|
- background: #1e1e1e;
|
|
|
|
|
|
|
+/* Status Indicator Dot */
|
|
|
|
|
+.status-indicator {
|
|
|
|
|
+ width: 10px;
|
|
|
|
|
+ height: 10px;
|
|
|
|
|
+ border-radius: 50%;
|
|
|
|
|
+ background: #ccc;
|
|
|
|
|
+ transition: background 0.3s;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/* Individual Sections (Input vs Message) */
|
|
|
|
|
-.log-section {
|
|
|
|
|
- margin-top: 12px;
|
|
|
|
|
|
|
+.status-indicator.active {
|
|
|
|
|
+ background: #4caf50;
|
|
|
|
|
+ box-shadow: 0 0 8px #4caf50;
|
|
|
|
|
+ animation: pulse-dot 1.5s infinite;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/* 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;
|
|
|
|
|
|
|
+@keyframes pulse-dot {
|
|
|
|
|
+ 0% { opacity: 1; }
|
|
|
|
|
+ 50% { opacity: 0.4; }
|
|
|
|
|
+ 100% { opacity: 1; }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/* 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 */
|
|
|
|
|
|
|
+/* 4. Right Panel: Trace & Logic (Dark Theme) */
|
|
|
|
|
+.agent-card {
|
|
|
|
|
+ background: #1e1e1e !important;
|
|
|
|
|
+ color: #d4d4d4;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/* 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;
|
|
|
|
|
|
|
+.agent-card .card-header {
|
|
|
|
|
+ background: #252526;
|
|
|
|
|
+ border-bottom: 1px solid #333;
|
|
|
|
|
+ color: white;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-/* Logic Status Pilling */
|
|
|
|
|
-.status-pill.completed {
|
|
|
|
|
- background: #2e7d32;
|
|
|
|
|
- color: #fff;
|
|
|
|
|
|
|
+.log-area {
|
|
|
|
|
+ flex: 1;
|
|
|
|
|
+ overflow-y: auto !important;
|
|
|
|
|
+ min-height: 0;
|
|
|
|
|
+ padding: 0 !important;
|
|
|
|
|
+ background: #1e1e1e;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.status-pill.processing {
|
|
|
|
|
- background: #e65100;
|
|
|
|
|
- color: #fff;
|
|
|
|
|
|
|
+.log-entry {
|
|
|
|
|
+ border-bottom: 1px solid #333;
|
|
|
|
|
+ padding: 20px;
|
|
|
|
|
+ background: #1e1e1e;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.status-pill.error {
|
|
|
|
|
- background: #c62828;
|
|
|
|
|
- color: #fff;
|
|
|
|
|
|
|
+.log-header {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ justify-content: space-between;
|
|
|
|
|
+ align-items: center;
|
|
|
|
|
+ margin-bottom: 12px;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.node-badge {
|
|
.node-badge {
|
|
@@ -188,23 +158,82 @@
|
|
|
background: rgba(78, 201, 176, 0.1);
|
|
background: rgba(78, 201, 176, 0.1);
|
|
|
padding: 4px 8px;
|
|
padding: 4px 8px;
|
|
|
border-radius: 4px;
|
|
border-radius: 4px;
|
|
|
|
|
+ border: 1px solid rgba(78, 201, 176, 0.2);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+.status-pill {
|
|
|
|
|
+ font-size: 0.7rem;
|
|
|
|
|
+ padding: 2px 8px;
|
|
|
|
|
+ border-radius: 12px;
|
|
|
|
|
+ text-transform: uppercase;
|
|
|
|
|
+ font-weight: 700;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.status-pill.completed { background: #2e7d32; color: #fff; }
|
|
|
|
|
+.status-pill.processing { background: #e65100; color: #fff; }
|
|
|
|
|
+.status-pill.error { background: #c62828; color: #fff; }
|
|
|
|
|
+
|
|
|
|
|
+/* Log Body Content */
|
|
|
.log-body {
|
|
.log-body {
|
|
|
|
|
+ display: flex;
|
|
|
|
|
+ flex-direction: column;
|
|
|
|
|
+ gap: 8px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.message-text {
|
|
|
|
|
+ font-family: 'Segoe UI', sans-serif;
|
|
|
|
|
+ font-size: 0.95rem;
|
|
|
|
|
+ line-height: 1.4;
|
|
|
|
|
+ color: #d4d4d4;
|
|
|
|
|
+ border-left: 3px solid #3f51b5;
|
|
|
|
|
+ padding-left: 12px;
|
|
|
|
|
+ margin-bottom: 8px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.message-text.processing-text {
|
|
|
|
|
+ border-left-color: #e65100;
|
|
|
|
|
+ color: #ffcc80;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.log-section .label {
|
|
|
|
|
+ display: block;
|
|
|
|
|
+ font-size: 0.65rem;
|
|
|
|
|
+ font-weight: 800;
|
|
|
|
|
+ color: #777;
|
|
|
margin-top: 10px;
|
|
margin-top: 10px;
|
|
|
- font-family: 'Fira Code', monospace;
|
|
|
|
|
|
|
+ margin-bottom: 4px;
|
|
|
|
|
+ letter-spacing: 1px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.simple-value {
|
|
|
|
|
+ font-family: 'Roboto Mono', monospace;
|
|
|
font-size: 0.85rem;
|
|
font-size: 0.85rem;
|
|
|
- color: #9cdcfe;
|
|
|
|
|
|
|
+ color: #ce9178;
|
|
|
|
|
+ padding-left: 4px;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+.code-block {
|
|
|
|
|
+ margin: 0;
|
|
|
|
|
+ font-family: 'Fira Code', 'Consolas', monospace;
|
|
|
|
|
+ font-size: 0.8rem;
|
|
|
background: #121212;
|
|
background: #121212;
|
|
|
|
|
+ color: #9cdcfe;
|
|
|
padding: 12px;
|
|
padding: 12px;
|
|
|
border-radius: 6px;
|
|
border-radius: 6px;
|
|
|
|
|
+ border: 1px solid #333;
|
|
|
|
|
+ overflow-x: auto;
|
|
|
white-space: pre-wrap;
|
|
white-space: pre-wrap;
|
|
|
|
|
+ word-break: break-all;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+/* Typing Animation */
|
|
|
.typing-indicator {
|
|
.typing-indicator {
|
|
|
display: flex;
|
|
display: flex;
|
|
|
gap: 4px;
|
|
gap: 4px;
|
|
|
- padding: 8px;
|
|
|
|
|
|
|
+ padding: 12px;
|
|
|
|
|
+ align-self: flex-start;
|
|
|
|
|
+ background: #f1f3f4;
|
|
|
|
|
+ border-radius: 12px;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
.typing-indicator span {
|
|
.typing-indicator span {
|
|
@@ -212,32 +241,23 @@
|
|
|
height: 6px;
|
|
height: 6px;
|
|
|
background: #90a4ae;
|
|
background: #90a4ae;
|
|
|
border-radius: 50%;
|
|
border-radius: 50%;
|
|
|
- animation: pulse 1.5s infinite;
|
|
|
|
|
|
|
+ animation: pulse-typing 1.5s infinite;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-@keyframes pulse {
|
|
|
|
|
|
|
+.typing-indicator span:nth-child(2) { animation-delay: 0.2s; }
|
|
|
|
|
+.typing-indicator span:nth-child(3) { animation-delay: 0.4s; }
|
|
|
|
|
|
|
|
- 0%,
|
|
|
|
|
- 100% {
|
|
|
|
|
- transform: translateY(0);
|
|
|
|
|
- opacity: 0.4;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- 50% {
|
|
|
|
|
- transform: translateY(-4px);
|
|
|
|
|
- opacity: 1;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+@keyframes pulse-typing {
|
|
|
|
|
+ 0%, 100% { transform: translateY(0); opacity: 0.4; }
|
|
|
|
|
+ 50% { transform: translateY(-4px); opacity: 1; }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+/* Scrollbar Customization */
|
|
|
|
|
+.message-area::-webkit-scrollbar,
|
|
|
.log-area::-webkit-scrollbar {
|
|
.log-area::-webkit-scrollbar {
|
|
|
- width: 8px;
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-.log-area::-webkit-scrollbar-track {
|
|
|
|
|
- background: #1e1e1e;
|
|
|
|
|
|
|
+ width: 6px;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-.log-area::-webkit-scrollbar-thumb {
|
|
|
|
|
- background: #333;
|
|
|
|
|
- border-radius: 4px;
|
|
|
|
|
-}
|
|
|
|
|
|
|
+.log-area::-webkit-scrollbar-track { background: #1e1e1e; }
|
|
|
|
|
+.log-area::-webkit-scrollbar-thumb { background: #444; border-radius: 10px; }
|
|
|
|
|
+.message-area::-webkit-scrollbar-thumb { background: #ccc; border-radius: 10px; }
|