precis / frontend /src /App.css
compendious's picture
YT support, front end improvements, secondary model option (might remove later)
ca552c5
/* Header */
.header {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--spacing-2) var(--spacing-4);
background-color: var(--color-canvas-subtle);
border-bottom: 1px solid var(--color-border-default);
position: sticky;
top: 0;
z-index: 10;
backdrop-filter: blur(12px);
background-color: rgba(22, 27, 34, 0.85);
}
.logo {
display: flex;
align-items: center;
gap: 10px;
text-decoration: none;
color: var(--color-fg-default);
}
.logo-icon {
width: 28px;
height: 28px;
border-radius: 4px;
}
.logo-text {
font-size: 18px;
font-weight: 600;
letter-spacing: -0.01em;
}
.header-actions {
display: flex;
align-items: center;
gap: var(--spacing-2);
}
.model-select {
appearance: none;
background: var(--color-canvas-default);
border: 1px solid var(--color-border-default);
border-radius: 6px;
color: var(--color-fg-default);
font-size: 13px;
font-family: inherit;
padding: 6px 28px 6px 10px;
cursor: pointer;
transition: border-color 0.15s;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 8px center;
}
.model-select:hover {
border-color: var(--color-accent-fg);
}
.model-select:focus {
outline: none;
border-color: var(--color-accent-fg);
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.15);
}
.model-select:disabled {
opacity: 0.5;
cursor: not-allowed;
}
/* Main content */
.main {
flex: 1;
padding: var(--spacing-6) 0;
}
.page-title {
font-size: 32px;
font-weight: 600;
margin-bottom: var(--spacing-2);
}
.page-subtitle {
font-size: 16px;
color: var(--color-fg-muted);
margin-bottom: var(--spacing-5);
}
/* Upload section */
.upload-section {
max-width: 800px;
margin: 0 auto;
}
.upload-card {
background-color: var(--color-canvas-subtle);
border: 1px solid var(--color-border-default);
border-radius: var(--radius-2);
overflow: hidden;
box-shadow: var(--shadow-md);
transition: box-shadow 0.2s ease;
}
.upload-card:hover {
box-shadow: var(--shadow-lg);
}
.upload-header {
padding: var(--spacing-3) var(--spacing-4);
background-color: var(--color-canvas-inset);
border-bottom: 1px solid var(--color-border-muted);
}
.upload-title {
font-size: 14px;
font-weight: 600;
display: flex;
align-items: center;
gap: var(--spacing-2);
}
.upload-title svg {
width: 16px;
height: 16px;
color: var(--color-fg-muted);
}
.upload-body {
padding: var(--spacing-4);
}
/* Tab content panels */
.tab-panel {
display: none;
}
.tab-panel.active {
display: block;
animation: fadeIn 0.2s ease-out;
}
/* Form groups */
.form-group {
margin-bottom: var(--spacing-4);
}
.form-label {
display: block;
font-size: 14px;
font-weight: 500;
color: var(--color-fg-default);
margin-bottom: var(--spacing-2);
}
.form-hint {
font-size: 12px;
color: var(--color-fg-muted);
margin-top: var(--spacing-1);
}
/* File input styling */
.file-input {
display: none;
}
.file-selected {
display: flex;
align-items: center;
gap: var(--spacing-3);
padding: var(--spacing-3);
background-color: var(--color-canvas-default);
border: 1px solid var(--color-border-default);
border-radius: var(--radius-1);
margin-top: var(--spacing-3);
}
.file-icon {
width: 32px;
height: 32px;
display: flex;
align-items: center;
justify-content: center;
background-color: var(--color-accent-emphasis);
border-radius: var(--radius-1);
color: white;
}
.file-info {
flex: 1;
}
.file-name {
font-size: 14px;
font-weight: 500;
color: var(--color-fg-default);
}
.file-size {
font-size: 12px;
color: var(--color-fg-muted);
}
.file-remove {
padding: var(--spacing-1);
background: transparent;
border: none;
color: var(--color-fg-muted);
cursor: pointer;
border-radius: var(--radius-1);
transition: color var(--transition-fast), background-color var(--transition-fast);
}
.file-remove:hover {
color: var(--color-danger-fg);
background-color: rgba(248, 81, 73, 0.1);
}
/* Submit section */
.submit-section {
display: flex;
justify-content: flex-end;
padding-top: var(--spacing-4);
border-top: 1px solid var(--color-border-muted);
margin-top: var(--spacing-4);
}
/* Response section */
.response-section {
margin-top: var(--spacing-5);
}
.response-card {
background-color: var(--color-canvas-subtle);
border: 1px solid var(--color-border-default);
border-radius: var(--radius-2);
overflow: hidden;
}
.response-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: var(--spacing-3) var(--spacing-4);
background-color: var(--color-canvas-inset);
border-bottom: 1px solid var(--color-border-muted);
}
.response-title {
font-size: 14px;
font-weight: 600;
display: flex;
align-items: center;
gap: var(--spacing-2);
}
.response-badge {
font-size: 12px;
padding: 2px 8px;
border-radius: var(--radius-full);
background-color: var(--color-btn-primary-bg);
color: white;
}
.response-body {
padding: var(--spacing-4);
}
.response-text {
font-size: 14px;
line-height: 1.7;
color: var(--color-fg-default);
white-space: pre-wrap;
}
/* Loading state */
.loading {
display: flex;
flex-direction: column;
align-items: center;
gap: var(--spacing-3);
padding: var(--spacing-6);
color: var(--color-fg-muted);
}
.loading-spinner {
width: 24px;
height: 24px;
border: 2px solid var(--color-border-default);
border-top-color: var(--color-accent-fg);
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}
/* Footer */
.footer {
padding: var(--spacing-4);
text-align: center;
font-size: 12px;
color: var(--color-fg-subtle);
border-top: 1px solid var(--color-border-muted);
}
.footer a {
color: var(--color-accent-fg);
text-decoration: none;
}
.footer a:hover {
text-decoration: underline;
}
/* Inline result */
.inline-result {
margin-top: var(--spacing-3);
padding: var(--spacing-3) var(--spacing-4);
border-radius: var(--radius-1);
font-size: 13px;
line-height: 1.6;
display: flex;
align-items: flex-start;
gap: var(--spacing-2);
border: 1px solid transparent;
}
.inline-result--success {
background-color: rgba(46, 160, 67, 0.08);
border-color: rgba(46, 160, 67, 0.3);
color: var(--color-fg-default);
flex-direction: column;
gap: var(--spacing-2);
}
.inline-result--error {
background-color: rgba(248, 81, 73, 0.08);
border-color: rgba(248, 81, 73, 0.3);
color: var(--color-danger-fg);
align-items: center;
}
.inline-result--loading {
background-color: var(--color-canvas-inset);
border-color: var(--color-border-muted);
color: var(--color-fg-muted);
align-items: center;
}
.inline-result--streaming {
background-color: var(--color-canvas-inset);
border-color: var(--color-accent-emphasis);
color: var(--color-fg-default);
flex-direction: column;
gap: var(--spacing-2);
}
.inline-result--streaming .inline-result__label {
color: var(--color-accent-fg);
}
.inline-result__label {
display: flex;
align-items: center;
gap: var(--spacing-1);
font-size: 12px;
font-weight: 600;
color: rgba(46, 160, 67, 0.9);
width: 100%;
}
.inline-result__text {
font-size: 14px;
line-height: 1.7;
color: var(--color-fg-default);
white-space: pre-wrap;
margin: 0;
}
/* Streaming cursor blink */
.streaming-cursor {
animation: blink 0.7s step-end infinite;
color: var(--color-accent-fg);
font-weight: 300;
}
@keyframes blink {
50% {
opacity: 0;
}
}
.streaming-placeholder {
color: var(--color-fg-muted);
font-style: italic;
}