steinad's picture
Initial commit
adca48b
raw
history blame
8.5 kB
/* Utility Components */
.status-bar {
padding: 12px 24px;
background: var(--primary-50);
border-bottom: 1px solid var(--primary-200);
font-size: 13px;
font-weight: 500;
color: var(--primary-700);
display: none;
}
.status-bar.show {
display: block;
}
.status-bar.error {
background: var(--error-50);
border-color: var(--error-200);
color: var(--error-700);
}
.status-bar.success {
background: var(--success-50);
border-color: var(--success-200);
color: var(--success-700);
}
.status-bar.warning {
background: var(--warning-50);
border-color: var(--warning-200);
color: var(--warning-700);
}
.progress-container {
padding: 0 24px 16px;
display: none;
}
.progress-container.show {
display: block;
}
.progress-bar {
width: 100%;
height: 6px;
background: var(--gray-200);
border-radius: var(--radius-sm);
overflow: hidden;
}
.progress-fill {
height: 100%;
background: linear-gradient(90deg, var(--primary-500), var(--primary-600));
width: 0%;
transition: width 0.3s ease;
border-radius: var(--radius-sm);
}
/* Image Upload Components */
.image-upload {
position: relative;
background: white;
border: 2px dashed var(--gray-300);
border-radius: 16px;
padding: 24px;
text-align: center;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
cursor: pointer;
}
.image-upload:hover {
border-color: var(--primary-400);
background: var(--primary-50);
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(14, 165, 233, 0.15);
}
.image-upload.has-image {
border-style: solid;
border-color: var(--success-500);
background: var(--success-50);
}
.image-upload.drag-over {
border-color: var(--primary-500);
background: var(--primary-100);
transform: scale(1.02);
box-shadow: 0 8px 24px rgba(14, 165, 233, 0.25);
}
.image-upload-text {
margin-top: 12px;
font-size: 14px;
color: var(--gray-600);
font-weight: 500;
}
.image-upload.has-image .image-upload-text {
color: var(--success-700);
}
.image-upload-btn {
display: inline-flex;
align-items: center;
gap: 12px;
padding: 16px 24px;
background: linear-gradient(135deg, var(--gray-50) 0%, var(--gray-100) 100%);
color: var(--gray-700);
border: 2px solid var(--gray-200);
border-radius: 12px;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
font-size: 14px;
font-weight: 600;
letter-spacing: 0.01em;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.04);
}
.image-upload-btn:hover {
background: linear-gradient(135deg, var(--primary-50) 0%, var(--primary-100) 100%);
border-color: var(--primary-300);
color: var(--primary-700);
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(14, 165, 233, 0.2);
}
.image-upload input {
display: none;
}
.image-preview {
margin-top: 20px;
max-width: 100%;
max-height: 240px;
border-radius: 12px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
object-fit: cover;
border: 3px solid white;
}
/* Expandable message styles */
.expandable-message {
position: relative;
}
.expand-toggle {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 4px 8px;
background: var(--gray-100);
border: 1px solid var(--gray-200);
border-radius: 6px;
color: var(--gray-600);
font-size: 12px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
margin-left: 8px;
vertical-align: middle;
}
.expand-toggle:hover {
background: var(--gray-200);
border-color: var(--gray-300);
color: var(--gray-700);
}
.expand-toggle i {
transition: transform 0.2s ease;
}
.expand-toggle.expanded i {
transform: rotate(180deg);
}
.expandable-content {
max-height: 0;
overflow: hidden;
transition: max-height 0.3s cubic-bezier(0.4, 0, 0.2, 1);
margin-top: 12px;
background: var(--gray-50);
border-radius: 8px;
border: 1px solid var(--gray-200);
}
.expandable-content.expanded {
max-height: 400px;
overflow-y: auto;
}
/* Custom scrollbar for expandable content */
.expandable-content::-webkit-scrollbar {
width: 6px;
}
.expandable-content::-webkit-scrollbar-track {
background: var(--gray-100);
border-radius: 3px;
}
.expandable-content::-webkit-scrollbar-thumb {
background: var(--gray-400);
border-radius: 3px;
}
.expandable-content::-webkit-scrollbar-thumb:hover {
background: var(--gray-500);
}
.expandable-content-inner {
padding: 16px;
}
.prompt-conversation {
display: flex;
flex-direction: column;
gap: 12px;
}
.prompt-message {
background: white;
border-radius: 6px;
padding: 12px;
border-left: 3px solid var(--gray-300);
}
.prompt-message.system {
border-left-color: var(--warning-500);
}
.prompt-message.user {
border-left-color: var(--primary-500);
}
.prompt-message.assistant {
border-left-color: var(--success-500);
}
.prompt-role {
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
color: var(--gray-500);
margin-bottom: 6px;
letter-spacing: 0.5px;
}
.prompt-message.system .prompt-role {
color: var(--warning-600);
}
.prompt-message.user .prompt-role {
color: var(--primary-600);
}
.prompt-message.assistant .prompt-role {
color: var(--success-600);
}
.prompt-content {
font-size: 13px;
line-height: 1.4;
color: var(--gray-700);
white-space: pre-wrap;
word-break: break-word;
}
.prompt-content pre {
background: var(--gray-50);
border: 1px solid var(--gray-200);
border-radius: 4px;
padding: 8px;
margin: 8px 0;
font-size: 12px;
overflow-x: auto;
}
.prompt-content code {
background: var(--gray-100);
padding: 2px 4px;
border-radius: 3px;
font-size: 12px;
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
}
.prompt-content pre code {
background: transparent;
padding: 0;
border-radius: 0;
}
.prompt-description {
font-size: 12px;
color: var(--gray-500);
margin-bottom: 8px;
font-style: italic;
}
.prompt-image {
background: var(--gray-100);
border: 1px dashed var(--gray-300);
border-radius: 4px;
padding: 8px 12px;
font-size: 12px;
color: var(--gray-600);
text-align: center;
margin: 4px 0;
}
/* Loading and streaming animations */
.loading-dots::after {
content: '';
animation: dots 1.5s steps(5, end) infinite;
}
@keyframes dots {
0%, 20% { color: rgba(0,0,0,0); text-shadow: .25em 0 0 rgba(0,0,0,0), .5em 0 0 rgba(0,0,0,0); }
40% { color: var(--gray-500); text-shadow: .25em 0 0 rgba(0,0,0,0), .5em 0 0 rgba(0,0,0,0); }
60% { text-shadow: .25em 0 0 var(--gray-500), .5em 0 0 rgba(0,0,0,0); }
80%, 100% { text-shadow: .25em 0 0 var(--gray-500), .5em 0 0 var(--gray-500); }
}
/* Streaming and execution indicators */
.streaming-indicator {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 8px 12px;
background: var(--primary-50);
border: 1px solid var(--primary-200);
border-radius: var(--radius-md);
font-size: 13px;
color: var(--primary-700);
margin: 8px 0;
}
.execution-spinner {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 8px 12px;
background: var(--warning-50);
border: 1px solid var(--warning-200);
border-radius: var(--radius-md);
font-size: 13px;
color: var(--warning-700);
margin: 8px 0;
}
.spinner {
width: 16px;
height: 16px;
border: 2px solid transparent;
border-top: 2px solid currentColor;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.streaming-text {
background: var(--primary-50);
padding: 2px 6px;
border-radius: var(--radius-sm);
border-left: 3px solid var(--primary-500);
animation: pulse-blue 1.5s ease-in-out infinite;
min-height: 20px;
display: block;
margin-top: 8px;
}
@keyframes pulse-blue {
0%, 100% { background-color: var(--primary-50); }
50% { background-color: var(--primary-100); }
}
.typing-indicator {
display: inline;
color: var(--primary-600);
font-weight: bold;
}
.typing-indicator::after {
content: '|';
animation: blink 1s infinite;
}
@keyframes blink {
0%, 50% { opacity: 1; }
51%, 100% { opacity: 0; }
}