quantum-ai-v3/static/css/agent-base.css
Claude 641d676f2f 🎉 Complete 5 Whys agent enhancements with session management and UI improvements
## Major Features Added:

### 🕒 Session Time Limits (2hr → 30min)
- Updated ChatSession model: expires_at, extend_session methods
- Changed session creation and extension logic
- Updated JavaScript timing calculations
- Fixed timing indicator functionality with real-time server data

### 💬 Message Limits (50 → 20)
- Added message_limit field to Agent model with migration
- Implemented auto-completion when message limit reached
- Only count user messages (not agent responses) toward limit
- Enhanced error messaging for limit exceeded

### 📥 Chat Download System
- Added PDF and TXT export functionality using ReportLab
- Download buttons in chat header for active sessions
- Comprehensive export with session metadata and formatting
- New API endpoints: /agents/api/chat/export/{session_id}/

### 📋 Previous Sessions Management
- Created Previous Sessions widget showing last 5 non-active sessions
- Download access for all completed sessions with messages
- Session status indicators ( Completed,  Expired,  Abandoned)
- Clean sidebar organization with session history

### 🎨 UI/UX Improvements
- Moved session info from main chat to sidebar for cleaner interface
- Increased chat height: 600px → 800px (mobile: 500px → 650px)
- Added Current Session widget with status, ID, and start time
- Enhanced sidebar layout with proper component stacking
- Responsive design with mobile optimizations

### 🔧 Session Indicators System
- Real-time session status API with server-side data
- Progress bars for time remaining and message usage
- Warning notifications for approaching limits
- Automatic updates every 30 seconds

### 💰 Payment Flow Fixes
- Fixed charging system to actually deduct wallet balance
- Each new session charges 15 AED for 20 messages + 30 minutes
- Proper error handling for insufficient balance
- Session cleanup on payment failures

## Technical Implementation:

**Backend Changes:**
- Enhanced ChatSession model with 30-minute duration
- Message counting logic (user messages only)
- Auto-completion on limit reached
- Session status API endpoint
- PDF/TXT export with ReportLab

**Frontend Changes:**
- Comprehensive sidebar widget system
- Real-time indicator updates with server sync
- Download functionality with loading states
- Session history display with status icons
- Responsive layout improvements

**Database:**
- Added message_limit field to Agent model
- Updated ChatSession expiration logic
- Efficient queries for session history

## User Experience:
 Clear session limits (20 messages, 30 minutes)
 Automatic session completion with preserved history
 Easy download access for all previous sessions
 Transparent pricing (15 AED per session)
 Clean, organized interface with more chat space
 Real-time feedback on session progress

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-03 13:28:39 +05:30

1241 lines
25 KiB
CSS

/* NetCop AI Agents - Unified CSS System */
/* Supports multiple themes with consistent components */
/* Agent-specific overrides and theme variations */
:root {
/* Agent-specific primary color (black theme) */
--primary: #000000;
/* Agent-specific font sizes (slightly smaller for dense layouts) */
--text-xs: 11px;
--text-sm: 13px;
--text-base: 14px;
--text-lg: 16px;
--text-xl: 18px;
}
/* Professional Theme (Default - Black & White) */
.theme-professional {
--agent-bg: #ffffff;
--agent-primary: #000000;
--agent-card-bg: #f8f9fa;
--agent-border: #e0e0e0;
--agent-backdrop-filter: none;
--agent-card-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
--agent-card-border: 1px solid var(--border-color);
}
/* Creative Theme (Pink/Purple with Glassmorphism) */
.theme-creative {
--agent-bg: var(--gradient-hero);
--agent-primary: rgba(236, 72, 153, 1);
--agent-card-bg: rgba(255, 255, 255, 0.9);
--agent-border: rgba(255, 255, 255, 0.3);
--agent-backdrop-filter: blur(20px);
--agent-card-shadow: 0 8px 25px rgba(0, 0, 0, 0.1);
--agent-card-border: 1px solid rgba(255, 255, 255, 0.3);
}
/* Minimal Theme (Light Gray) */
.theme-minimal {
--agent-bg: #fafafa;
--agent-primary: #374151;
--agent-card-bg: #ffffff;
--agent-border: #e5e7eb;
--agent-backdrop-filter: none;
--agent-card-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
--agent-card-border: 1px solid #e5e7eb;
}
/* Font imported globally in base.html - no need for duplicate import */
/* Base Styles - Data Analyzer Exact Copy */
/* Scoped font-family - unified with header component */
.main-container *:not(.header-component):not(.header-component *),
.pricing-page *:not(.header-component):not(.header-component *):not(.nav-link):not(.auth-links *),
.agent-page *:not(.header-component):not(.header-component *):not(.nav-link):not(.auth-links *),
.modal-overlay *,
.footer * {
font-family: 'Inter', Arial, sans-serif;
}
* {
box-sizing: border-box;
}
body {
background: var(--background);
color: var(--on-surface);
line-height: 1.5;
font-weight: 400;
}
html {
scrollbar-gutter: stable;
}
/* Page Layout - Universal Agent Layout */
.agent-page {
background: var(--agent-bg);
min-height: calc(100vh - 80px);
padding: var(--space-lg);
width: 100vw;
margin-left: calc(-50vw + 50%);
color: var(--text-color);
}
/* Layout - Data Analyzer Exact Copy */
.agent-container {
margin: 0 auto;
padding: var(--spacing-sm);
max-width: 1600px;
}
/* Card Components */
.card {
background: var(--agent-card-bg);
border-radius: var(--radius);
padding: var(--space-lg);
border: var(--agent-card-border);
margin-bottom: var(--space-md);
backdrop-filter: var(--agent-backdrop-filter);
box-shadow: var(--agent-card-shadow);
}
.section-title {
font-size: var(--text-lg);
font-weight: 600;
color: var(--text-color);
margin-bottom: var(--space-md);
border-bottom: 1px solid var(--agent-border);
padding-bottom: var(--space-sm);
}
.section-container {
margin-bottom: var(--space-lg);
padding: var(--space-md);
border-radius: var(--radius);
border: 1px solid var(--agent-border);
}
/* Special Section Styling for Creative Theme */
.theme-creative .section-container.content-info {
background: rgba(59, 130, 246, 0.1);
border-color: rgba(59, 130, 246, 0.3);
}
.theme-creative .section-container.platform-info {
background: rgba(139, 92, 246, 0.1);
border-color: rgba(139, 92, 246, 0.3);
}
.section-subtitle {
font-size: var(--text-sm);
font-weight: 600;
color: var(--accent-color);
margin-bottom: var(--space-md);
text-transform: uppercase;
letter-spacing: 0.5px;
}
/* Agent-specific form theme overrides */
/* Form validation enhancements */
.required::after {
content: " *";
color: var(--error);
}
/* Creative theme focus styles */
.theme-creative .form-input:focus,
.theme-creative .form-textarea:focus {
border-color: var(--agent-primary);
box-shadow: 0 0 0 3px rgba(236, 72, 153, 0.1);
}
.form-label {
display: block;
margin-bottom: var(--space-xs);
font-size: var(--text-sm);
font-weight: 500;
color: var(--text-color);
}
.form-help {
font-size: var(--text-xs);
color: var(--accent-color);
margin-top: var(--space-xs);
opacity: 0.7;
}
.form-group {
margin-bottom: var(--space-md);
}
.form-group.error .form-input,
.form-group.error .form-textarea {
border-color: var(--error-color);
}
/* Radio Buttons - Data Analyzer Exact Copy */
.radio-grid {
display: flex;
gap: var(--spacing-md);
}
.radio-card {
position: relative;
padding: var(--spacing-md);
border: 1px solid var(--outline-variant);
border-radius: var(--radius-md);
cursor: pointer;
transition: all 0.2s ease;
background: var(--surface);
display: flex;
align-items: center;
gap: var(--spacing-md);
}
.radio-card:hover {
border-color: var(--primary);
box-shadow: var(--shadow-sm);
}
.radio-card.selected {
border-color: var(--primary);
}
.radio-card input {
position: absolute;
opacity: 0;
pointer-events: none;
}
.radio-button {
width: 20px;
height: 20px;
border: 2px solid var(--outline);
border-radius: 50%;
position: relative;
transition: all 0.2s ease;
flex-shrink: 0;
}
.radio-card:hover .radio-button,
.radio-card.selected .radio-button {
border-color: var(--primary);
}
.radio-card.selected .radio-button::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 10px;
height: 10px;
background: var(--primary);
border-radius: 50%;
transform: translate(-50%, -50%);
}
.radio-label {
font-size: 14px;
font-weight: 500;
color: var(--on-surface);
display: flex;
align-items: center;
gap: var(--spacing-sm);
pointer-events: none;
}
.radio-card {
position: relative;
padding: 16px;
border: 1px solid var(--agent-border);
border-radius: var(--radius);
cursor: pointer;
transition: all 0.2s ease;
background: var(--agent-card-bg);
display: flex;
align-items: center;
gap: 16px;
}
.radio-card:hover {
border-color: var(--agent-primary);
box-shadow: var(--shadow);
}
.radio-card.selected {
border-color: var(--agent-primary);
}
.radio-card input {
position: absolute;
opacity: 0;
pointer-events: none;
}
.radio-button {
width: 20px;
height: 20px;
border: 2px solid var(--agent-border);
border-radius: 50%;
position: relative;
transition: all 0.2s ease;
flex-shrink: 0;
}
.radio-card:hover .radio-button,
.radio-card.selected .radio-button {
border-color: var(--agent-primary);
}
.radio-card.selected .radio-button::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 10px;
height: 10px;
background: var(--agent-primary);
border-radius: 50%;
transform: translate(-50%, -50%);
}
.radio-label {
font-size: 14px;
font-weight: 500;
color: var(--text-color);
display: flex;
align-items: center;
gap: 8px;
cursor: pointer;
}
/* File Upload - Data Analyzer Exact Copy */
.file-upload-area {
border: 2px dashed var(--outline);
border-radius: var(--radius-md);
padding: var(--spacing-xl);
text-align: center;
background: #fafbfc;
transition: all 0.2s ease;
cursor: pointer;
}
.file-upload-area:hover,
.file-upload-area.active {
border-color: var(--primary);
background: var(--surface);
box-shadow: 0 0 0 3px rgba(0, 0, 0, 0.05);
}
.upload-icon {
font-size: 32px;
margin-bottom: var(--spacing-sm);
color: var(--on-surface-variant);
}
.upload-text {
font-size: 16px;
font-weight: 500;
color: var(--on-surface);
margin-bottom: 4px;
}
.upload-hint {
font-size: 14px;
color: var(--on-surface-variant);
}
/* Widgets - Data Analyzer Exact Copy */
.agent-widget {
background: var(--surface);
border-radius: var(--radius-lg);
padding: var(--spacing-xl);
border: 1px solid var(--outline-variant);
box-shadow: var(--shadow-sm);
transition: all 0.2s ease;
display: flex;
flex-direction: column;
}
.dashboard-widget:hover {
box-shadow: var(--shadow-md);
border-color: var(--outline);
transform: translateY(-2px);
}
/* Widget Sizes - Data Analyzer Exact Copy */
.widget-large {
flex: 1;
min-width: 400px;
}
.widget-small {
flex: 0 0 280px;
}
.widget-wide {
flex: 1 1 100%;
width: 100%;
}
.widget-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: var(--spacing-lg);
padding-bottom: var(--spacing-md);
border-bottom: 1px solid var(--outline-variant);
}
.widget-title {
font-size: 18px;
font-weight: 600;
color: var(--on-surface);
margin: 0;
display: flex;
align-items: center;
gap: var(--spacing-sm);
}
.widget-icon {
font-size: 20px;
padding: 6px;
border-radius: var(--radius-sm);
background: var(--surface-variant);
}
.widget-content {
flex: 1;
display: flex;
flex-direction: column;
gap: var(--spacing-md);
}
/* Wallet Card - Data Analyzer Exact Copy */
.wallet-card {
background: linear-gradient(135deg, #000000 0%, #333333 100%);
color: white;
border-radius: var(--radius-md);
padding: var(--spacing-md);
border: none;
box-shadow: var(--shadow-md);
position: relative;
overflow: hidden;
margin-bottom: 0;
min-height: auto;
}
.wallet-card::before {
content: '';
position: absolute;
top: 0;
right: 0;
width: 100px;
height: 100px;
background: rgba(255, 255, 255, 0.1);
border-radius: 50%;
transform: translate(30px, -30px);
}
.wallet-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: var(--spacing-sm);
}
.wallet-title {
font-size: 14px;
font-weight: 600;
margin: 0;
opacity: 0.9;
}
.wallet-icon {
font-size: 20px;
}
.balance-display {
margin-bottom: 0;
}
.balance-amount {
font-size: 24px;
font-weight: 700;
line-height: 1;
margin-bottom: 0;
letter-spacing: -0.5px;
}
/* Processing States - Data Analyzer Exact Copy */
.processing-status {
background: var(--surface);
border: 1px solid var(--outline-variant);
border-radius: var(--radius-lg);
padding: var(--spacing-xl);
text-align: center;
display: none;
}
/* Creative theme processing status */
.theme-creative .processing-status {
background: rgba(236, 72, 153, 0.1);
border: 2px solid var(--agent-primary);
color: rgba(190, 24, 93, 1);
font-weight: 600;
}
.status-icon {
font-size: 48px;
margin-bottom: var(--spacing-md);
animation: pulse 2s infinite;
}
/* Creative theme icon animation */
.theme-creative .processing-status .status-icon {
font-size: 32px;
animation: pulse 2s infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
.processing-status .status-text {
font-size: var(--text-base);
font-weight: 500;
margin-bottom: var(--space-xs);
}
.processing-status .status-detail {
font-size: var(--text-sm);
opacity: 0.7;
}
.status-title {
font-size: 18px;
font-weight: 600;
color: var(--on-surface);
margin-bottom: var(--spacing-sm);
}
.status-subtitle {
font-size: 14px;
color: var(--on-surface-variant);
}
.status-badge {
background: var(--success);
color: white;
padding: 4px 12px;
border-radius: 20px;
font-size: 12px;
font-weight: 600;
}
/* Results Display */
.results-container {
display: none;
}
.results-card {
background: var(--agent-card-bg);
border-radius: var(--radius);
padding: var(--space-lg);
border: var(--agent-card-border);
margin-top: var(--space-lg);
backdrop-filter: var(--agent-backdrop-filter);
box-shadow: var(--agent-card-shadow);
display: none;
}
.results-header {
display: flex;
align-items: center;
gap: var(--space-sm);
margin-bottom: var(--space-md);
padding-bottom: var(--space-sm);
border-bottom: 1px solid var(--agent-border);
}
.results-content {
background: white;
border: 1px solid var(--agent-border);
border-radius: var(--radius);
padding: var(--space-lg);
margin-bottom: var(--space-md);
line-height: 1.6;
color: var(--text-color);
font-size: var(--text-base);
white-space: pre-line;
word-wrap: break-word;
overflow-wrap: break-word;
max-width: 100%;
overflow-x: auto;
}
/* Enhanced Results Typography - Data Analyzer Exact Copy */
.results-content h1,
.results-content h2,
.results-content h3 {
color: var(--primary);
font-weight: 700;
margin: var(--spacing-xl) 0 var(--spacing-md) 0;
line-height: 1.3;
}
.results-content h1 {
font-size: 24px;
border-bottom: 3px solid var(--primary);
padding-bottom: var(--spacing-sm);
margin-bottom: var(--spacing-lg);
}
.results-content h2 {
font-size: 20px;
margin-top: var(--spacing-xl);
position: relative;
padding-left: var(--spacing-md);
}
.results-content h2::before {
content: '';
position: absolute;
left: 0;
top: 0;
bottom: 0;
width: 4px;
background: var(--primary);
border-radius: 2px;
}
.results-content h3 {
font-size: 18px;
color: var(--on-surface);
font-weight: 600;
background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
padding: var(--spacing-md) var(--spacing-lg);
border-radius: var(--radius-sm);
border-left: 4px solid var(--primary);
margin: var(--spacing-lg) 0 var(--spacing-md) 0;
}
.results-content p {
margin: var(--spacing-md) 0;
text-align: justify;
}
.results-content ul,
.results-content ol {
margin: var(--spacing-md) 0;
padding-left: var(--spacing-xl);
}
.results-content li {
margin: var(--spacing-sm) 0;
position: relative;
}
.results-content ul li::marker {
color: var(--primary);
font-weight: bold;
}
/* Modern Info Boxes - Data Analyzer Exact Copy */
.results-content .key-points,
.results-content .insights,
.results-content .summary {
background: var(--surface);
border: 1px solid var(--outline-variant);
border-radius: var(--radius-md);
padding: var(--spacing-lg);
margin: var(--spacing-lg) 0;
box-shadow: var(--shadow-sm);
}
.results-content .key-points {
border-left: 4px solid #3b82f6;
}
.results-content .insights {
border-left: 4px solid #10b981;
}
.results-content .summary {
border-left: 4px solid #f59e0b;
}
/* Strong text styling */
.results-content strong {
color: var(--primary);
font-weight: 600;
}
/* Code and technical terms */
.results-content code {
background: #f1f5f9;
padding: 2px 6px;
border-radius: 4px;
font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
font-size: 14px;
color: #1e293b;
}
.results-actions {
display: flex;
gap: var(--spacing-md);
flex-wrap: wrap;
}
/* Simple Text Styling for Results */
.results-content {
line-height: 1.6;
word-wrap: break-word;
overflow-wrap: break-word;
}
/* Buttons & Actions */
.action-buttons {
display: flex;
gap: var(--space-sm);
margin-top: var(--space-md);
flex-wrap: wrap;
}
/* Agent-specific button theme overrides */
.theme-creative .btn {
padding: 16px 32px;
border-radius: 12px;
font-weight: 600;
font-size: 16px;
min-height: 48px;
}
/* Wallet Sidebar */
.wallet-section {
position: sticky;
top: var(--space-lg);
}
.wallet-balance {
font-size: var(--text-lg);
font-weight: 600;
color: var(--text-color);
margin-bottom: var(--space-xs);
}
/* Creative theme larger wallet balance */
.theme-creative .wallet-balance {
font-size: 28px;
font-weight: 700;
}
.balance-label {
font-size: 12px;
opacity: 0.8;
font-weight: 400;
}
/* Creative theme larger balance label */
.theme-creative .balance-label {
font-size: 16px;
margin-bottom: 20px;
}
.process-btn {
width: 100%;
margin-bottom: var(--space-sm);
}
.insufficient-balance {
background: var(--agent-card-bg);
border: 1px solid var(--agent-border);
color: var(--text-color);
padding: var(--space-md);
border-radius: var(--radius);
text-align: center;
font-size: var(--text-sm);
margin-bottom: var(--space-sm);
font-weight: 500;
}
/* Creative theme insufficient balance */
.theme-creative .insufficient-balance {
background: rgba(239, 68, 68, 0.1);
border: 1px solid rgba(239, 68, 68, 0.3);
color: var(--error-color);
}
/* Usage Info */
.usage-info {
padding: var(--space-md);
background: var(--agent-card-bg);
border-radius: var(--radius);
border: 1px solid var(--agent-border);
}
/* Creative theme usage info */
.theme-creative .usage-info {
background: rgba(236, 72, 153, 0.1);
border: 1px solid rgba(236, 72, 153, 0.2);
}
.usage-info h4 {
margin: 0 0 var(--space-sm) 0;
font-size: var(--text-sm);
font-weight: 600;
color: var(--text-color);
}
/* Creative theme usage info header */
.theme-creative .usage-info h4 {
color: rgba(190, 24, 93, 1);
}
.usage-info ul {
margin: 0;
font-size: var(--text-xs);
color: var(--text-color);
line-height: 1.4;
list-style: none;
padding-left: 0;
}
.usage-info li {
margin: var(--space-xs) 0;
padding-left: var(--space-md);
position: relative;
}
.usage-info li::before {
content: "•";
position: absolute;
left: 0;
color: var(--agent-primary);
}
/* Responsive Design */
@media (max-width: 1200px) {
.agent-grid {
grid-template-columns: repeat(8, 1fr);
}
.widget-large {
grid-column: span 8;
}
.widget-medium {
grid-column: span 4;
}
.widget-small {
grid-column: span 4;
}
.widget-wide {
grid-column: span 8;
}
}
@media (max-width: 900px) {
.agent-grid {
grid-template-columns: repeat(4, 1fr);
gap: var(--spacing-md);
}
.widget-large,
.widget-medium,
.widget-small,
.widget-wide {
grid-column: span 4;
}
}
@media (max-width: 768px) {
.agent-container {
padding: var(--space-md);
}
.agent-header {
flex-direction: column;
align-items: flex-start;
gap: var(--space-sm);
}
.header-controls {
width: 100%;
justify-content: space-between;
}
.agent-title {
font-size: 24px;
}
.agent-grid {
grid-template-columns: 1fr;
gap: var(--spacing-md);
}
.widget-large,
.widget-medium,
.widget-small,
.widget-wide {
grid-column: span 1;
}
.action-buttons {
flex-direction: column;
}
.btn {
width: 100%;
}
.form-input, .form-textarea {
font-size: 16px; /* Prevent zoom on iOS */
}
.wallet-card {
padding: var(--spacing-lg);
}
.balance-amount {
font-size: 28px;
}
.quick-agent-toggle {
flex: 1;
margin-right: var(--spacing-md);
justify-content: center;
}
.quick-agents-panel {
width: 100%;
max-width: 100%;
right: 0;
left: 0;
}
}
@media (max-width: 480px) {
.agent-page {
padding: var(--space-sm);
}
.card {
padding: var(--space-md);
}
.section-container {
padding: var(--space-sm);
}
}
/* How It Works Widget - Data Analyzer Exact Copy */
.info-list {
list-style: none;
padding: 0;
margin: 0;
counter-reset: step-counter;
}
.info-list li {
padding: var(--spacing-sm) 0;
color: var(--on-surface-variant);
font-size: 14px;
border-bottom: 1px solid var(--outline-variant);
position: relative;
padding-left: var(--spacing-lg);
}
.info-list li:last-child {
border-bottom: none;
}
.info-list li::before {
content: counter(step-counter);
counter-increment: step-counter;
position: absolute;
left: 0;
top: var(--spacing-sm);
background: var(--primary);
color: white;
width: 20px;
height: 20px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 12px;
font-weight: 600;
}
/* Quick Agents Panel - Data Analyzer Exact Copy */
.quick-agent-toggle {
display: flex;
align-items: center;
gap: var(--spacing-sm);
padding: var(--spacing-md) var(--spacing-lg);
background: var(--surface);
border: 1px solid var(--outline-variant);
border-radius: var(--radius-md);
color: var(--on-surface);
font-size: 14px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s ease;
position: relative;
margin-top: var(--spacing-md);
width: 100%;
}
.quick-agent-toggle:hover {
background: var(--surface-variant);
border-color: var(--primary);
transform: translateY(-1px);
box-shadow: var(--shadow-sm);
}
.quick-agent-toggle.active {
background: var(--primary);
color: white;
border-color: var(--primary);
}
.toggle-icon {
font-size: 16px;
transition: transform 0.2s ease;
}
.quick-agent-toggle.active .toggle-icon {
transform: rotate(180deg);
}
.quick-agents-overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.5);
z-index: 999;
opacity: 0;
visibility: hidden;
transition: all 0.3s ease;
}
.quick-agents-overlay.active {
opacity: 1;
visibility: visible;
}
.quick-agents-panel {
position: fixed;
top: 0;
right: 0;
width: min(400px, 90vw);
height: 100vh;
background: var(--surface);
border-left: 1px solid var(--outline);
box-shadow: var(--shadow-lg);
z-index: 1000;
transform: translateX(100%);
transition: transform 0.3s ease;
overflow-y: auto;
}
.quick-agents-panel.active {
transform: translateX(0);
}
.quick-agents-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--spacing-lg);
border-bottom: 1px solid var(--outline-variant);
background: var(--surface-variant);
}
.quick-agents-header h3 {
margin: 0;
font-size: 18px;
font-weight: 600;
color: var(--on-surface);
}
.close-panel {
background: none;
border: none;
font-size: 24px;
color: var(--on-surface-variant);
cursor: pointer;
padding: 4px;
border-radius: var(--radius-sm);
transition: all 0.2s ease;
}
.close-panel:hover {
background: var(--surface);
color: var(--on-surface);
}
.quick-agents-grid {
padding: var(--spacing-lg);
display: flex;
flex-direction: column;
gap: var(--spacing-md);
}
.quick-agent-card {
display: flex;
align-items: center;
gap: var(--spacing-md);
padding: var(--spacing-md);
border: 1px solid var(--outline-variant);
border-radius: var(--radius-md);
text-decoration: none;
color: var(--on-surface);
transition: all 0.2s ease;
background: var(--surface);
}
.quick-agent-card:hover {
background: var(--surface-variant);
border-color: var(--primary);
transform: translateY(-1px);
box-shadow: var(--shadow-sm);
}
.agent-icon {
font-size: 24px;
width: 48px;
height: 48px;
display: flex;
align-items: center;
justify-content: center;
background: var(--surface-variant);
border-radius: var(--radius-md);
flex-shrink: 0;
}
.agent-info h4 {
margin: 0 0 4px 0;
font-size: 16px;
font-weight: 600;
}
.agent-info p {
margin: 0 0 4px 0;
font-size: 14px;
color: var(--accent-color);
}
.agent-price {
font-size: 14px;
font-weight: 600;
color: var(--agent-primary);
}
.quick-agents-footer {
padding: var(--spacing-md) var(--spacing-lg);
border-top: 1px solid var(--outline-variant);
background: var(--surface-variant);
}
.view-all-agents {
display: block;
text-align: center;
padding: var(--spacing-md);
background: var(--primary);
color: white;
text-decoration: none;
border-radius: var(--radius-md);
font-size: 14px;
font-weight: 500;
transition: all 0.2s ease;
}
.view-all-agents:hover {
transform: translateY(-1px);
box-shadow: var(--shadow-sm);
}
/* Toast Notifications */
.toast {
position: fixed;
top: 20px;
right: 20px;
padding: 16px 24px;
border-radius: var(--radius);
color: white;
font-weight: 500;
z-index: 1000;
opacity: 0;
transform: translateX(100%);
transition: all 0.3s ease;
}
.toast.show {
opacity: 1;
transform: translateX(0);
}
.toast.success {
background: var(--success-color);
}
.toast.error {
background: var(--error-color);
}
.toast.warning {
background: var(--warning-color);
}
.toast.info {
background: var(--info);
}
/* Agent Grid and Layout System */
.agent-grid {
display: flex;
gap: var(--spacing-sm);
align-items: flex-start;
flex-wrap: wrap;
}
.agent-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20px;
}
/* Typography - Data Analyzer Exact Copy */
.agent-title {
font-size: 32px;
font-weight: 700;
color: var(--on-surface);
margin: 0;
letter-spacing: -0.5px;
}
.agent-subtitle {
font-size: 16px;
color: var(--on-surface-variant);
margin: 4px 0 0 0;
}
.header-controls {
display: flex;
align-items: center;
gap: var(--spacing-lg);
}