petter2025's picture
Update ui/styles.py
f627f89 verified
raw
history blame
15.3 kB
"""
Enhanced CSS styles for ARF demo
Comprehensive styling for expressive Tab 1
"""
def get_styles() -> str:
"""Get all CSS styles for the ARF demo"""
return """
/* ===== Base Styles ===== */
.demo-container {
max-width: 1800px;
margin: 0 auto;
padding: 20px;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
}
.header-section {
text-align: center;
margin-bottom: 25px;
padding: 30px 40px;
background: linear-gradient(135deg, #1e3a8a 0%, #3b82f6 100%);
color: white;
border-radius: 16px;
box-shadow: 0 8px 32px rgba(59, 130, 246, 0.15);
}
.status-bar {
display: flex;
justify-content: center;
gap: 20px;
margin-bottom: 30px;
padding: 15px;
background: #f8fafc;
border-radius: 12px;
border: 1px solid #e2e8f0;
flex-wrap: wrap;
}
.status-item {
padding: 8px 16px;
background: white;
border-radius: 8px;
font-size: 14px;
font-weight: 500;
display: flex;
align-items: center;
gap: 6px;
border: 1px solid #e2e8f0;
}
.status-item.active {
background: #10b981;
color: white;
border-color: #10b981;
}
/* ===== Tab 1 Specific Styles ===== */
/* Scenario Card */
.scenario-card {
border: 1px solid #e2e8f0;
border-radius: 14px;
padding: 20px;
background: white;
box-shadow: 0 4px 12px rgba(0,0,0,0.05);
margin-bottom: 20px;
transition: all 0.3s ease;
}
.scenario-card:hover {
box-shadow: 0 8px 24px rgba(0,0,0,0.08);
transform: translateY(-2px);
}
.scenario-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
padding-bottom: 12px;
border-bottom: 2px solid #f1f5f9;
}
.scenario-header h3 {
margin: 0;
font-size: 18px;
color: #1e293b;
}
.severity-badge {
padding: 4px 12px;
border-radius: 20px;
font-size: 12px;
font-weight: bold;
color: white;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.severity-badge.high {
background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
}
.severity-badge.medium {
background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
}
.severity-badge.low {
background: linear-gradient(135deg, #10b981 0%, #059669 100%);
}
.scenario-details {
margin-top: 15px;
}
.scenario-detail-row {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 8px;
padding: 4px 0;
}
.detail-label {
font-size: 13px;
color: #64748b;
font-weight: 500;
}
.detail-value {
font-size: 14px;
color: #1e293b;
font-weight: 600;
}
.detail-value.revenue-risk {
color: #ef4444;
font-weight: 700;
}
.scenario-tags {
display: flex;
flex-wrap: wrap;
gap: 6px;
margin-top: 15px;
padding-top: 12px;
border-top: 1px solid #f1f5f9;
}
.scenario-tag {
padding: 3px 8px;
background: #f1f5f9;
border-radius: 6px;
font-size: 11px;
color: #475569;
font-weight: 500;
}
/* Agent Cards */
.agent-card {
border: 2px solid;
border-radius: 14px;
padding: 18px;
background: white;
text-align: center;
flex: 1;
margin: 5px;
min-height: 180px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
transition: all 0.3s ease;
}
.agent-card:hover {
transform: translateY(-4px);
box-shadow: 0 12px 24px rgba(0,0,0,0.1);
}
.agent-card.detection {
border-color: #3b82f6;
background: linear-gradient(135deg, #eff6ff 0%, #dbeafe 100%);
}
.agent-card.recall {
border-color: #8b5cf6;
background: linear-gradient(135deg, #f5f3ff 0%, #ede9fe 100%);
}
.agent-card.decision {
border-color: #10b981;
background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%);
}
.agent-icon {
font-size: 32px;
margin-bottom: 10px;
}
.agent-content {
width: 100%;
}
.agent-content h4 {
margin: 0 0 8px 0;
font-size: 16px;
color: #1e293b;
}
.agent-status-text {
font-size: 13px;
color: #475569;
margin-bottom: 12px;
line-height: 1.4;
}
.agent-metrics {
display: flex;
justify-content: space-around;
margin-bottom: 12px;
}
.agent-metric {
font-size: 11px;
padding: 3px 8px;
background: rgba(255, 255, 255, 0.8);
border-radius: 6px;
color: #475569;
font-weight: 500;
}
.agent-status {
display: inline-block;
padding: 5px 14px;
border-radius: 20px;
font-size: 12px;
font-weight: bold;
color: white;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.agent-status.active {
background: linear-gradient(135deg, #10b981 0%, #059669 100%);
}
/* OSS vs Enterprise Sections */
.oss-section, .enterprise-section {
padding: 20px;
border-radius: 14px;
margin-bottom: 15px;
flex: 1;
min-height: 320px;
display: flex;
flex-direction: column;
}
.oss-section {
background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%);
border: 2px solid #0ea5e9;
}
.enterprise-section {
background: linear-gradient(135deg, #f0fdf4 0%, #dcfce7 100%);
border: 2px solid #10b981;
}
.edition-header {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 15px;
padding-bottom: 12px;
border-bottom: 2px solid rgba(255, 255, 255, 0.3);
}
.edition-icon {
font-size: 28px;
}
.edition-header h3 {
margin: 0;
font-size: 20px;
color: #1e293b;
flex: 1;
}
.edition-badge {
padding: 4px 10px;
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
font-size: 11px;
font-weight: bold;
color: #475569;
}
.edition-description {
margin-bottom: 20px;
padding: 12px;
background: rgba(255, 255, 255, 0.7);
border-radius: 10px;
}
.edition-description p {
margin: 0;
font-size: 14px;
color: #475569;
font-weight: 500;
}
.intent-card, .execution-card {
background: white;
border-radius: 12px;
padding: 20px;
box-shadow: 0 4px 12px rgba(0,0,0,0.05);
flex: 1;
display: flex;
flex-direction: column;
}
.intent-header, .execution-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 1px solid #f1f5f9;
}
.intent-header h4, .execution-header h4 {
margin: 0;
font-size: 16px;
color: #1e293b;
}
.intent-confidence {
padding: 4px 10px;
background: #dbeafe;
color: #1d4ed8;
border-radius: 6px;
font-size: 12px;
font-weight: bold;
}
.execution-mode {
padding: 4px 10px;
background: #10b981;
color: white;
border-radius: 6px;
font-size: 12px;
font-weight: bold;
text-transform: uppercase;
}
.execution-mode.autonomous {
background: linear-gradient(135deg, #10b981 0%, #059669 100%);
}
.execution-mode.approval {
background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
}
.intent-details, .execution-details {
flex: 1;
}
.intent-details p, .execution-details p {
margin: 8px 0;
font-size: 14px;
color: #475569;
}
.intent-details strong, .execution-details strong {
color: #1e293b;
}
.savings-highlight {
color: #10b981;
font-weight: 700;
font-size: 16px;
}
.boundary-stop, .boundary-start {
margin-top: 20px;
text-align: center;
}
.stop-line, .start-line {
height: 2px;
background: linear-gradient(90deg, transparent, #3b82f6, transparent);
margin: 8px 0;
}
.start-line {
background: linear-gradient(90deg, transparent, #10b981, transparent);
}
.stop-text, .start-text {
font-size: 12px;
font-weight: bold;
padding: 6px 12px;
border-radius: 8px;
display: inline-block;
}
.stop-text {
background: #fee2e2;
color: #dc2626;
}
.start-text {
background: #dcfce7;
color: #166534;
}
/* Metric Cards */
.metric-card {
border: 1px solid #e2e8f0;
border-radius: 12px;
padding: 18px;
background: white;
margin: 8px;
text-align: center;
flex: 1;
min-width: 140px;
transition: all 0.3s ease;
}
.metric-card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 16px rgba(0,0,0,0.08);
}
.metric-card.detection {
border-left: 4px solid #3b82f6;
}
.metric-card.mttr {
border-left: 4px solid #10b981;
}
.metric-card.auto-heal {
border-left: 4px solid #8b5cf6;
}
.metric-card.savings {
border-left: 4px solid #f59e0b;
}
.metric-icon {
font-size: 28px;
margin-bottom: 10px;
}
.metric-content h4 {
margin: 0 0 8px 0;
font-size: 14px;
color: #64748b;
font-weight: 600;
}
.metric-value {
font-size: 28px;
font-weight: bold;
color: #1e40af;
margin: 8px 0;
}
.metric-card.mttr .metric-value {
color: #10b981;
}
.metric-card.auto-heal .metric-value {
color: #8b5cf6;
}
.metric-card.savings .metric-value {
color: #f59e0b;
}
.metric-comparison {
font-size: 12px;
color: #64748b;
margin: 0;
}
/* Buttons */
.oss-btn {
background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
color: white !important;
border: none;
padding: 16px 24px;
border-radius: 12px;
font-weight: 600;
font-size: 16px;
width: 100%;
transition: all 0.3s ease;
}
.oss-btn:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(59, 130, 246, 0.3);
}
.enterprise-btn {
background: linear-gradient(135deg, #10b981 0%, #059669 100%);
color: white !important;
border: none;
padding: 16px 24px;
border-radius: 12px;
font-weight: 600;
font-size: 16px;
width: 100%;
transition: all 0.3s ease;
}
.enterprise-btn:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(16, 185, 129, 0.3);
}
.button-info {
font-size: 12px;
color: #64748b;
text-align: center;
margin-top: 6px !important;
font-style: italic;
}
/* Approval Status */
.approval-status {
border: 2px solid #e2e8f0;
border-radius: 14px;
padding: 20px;
background: white;
margin-top: 20px;
}
.approval-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 15px;
padding-bottom: 12px;
border-bottom: 2px solid #f1f5f9;
}
.approval-header h4 {
margin: 0;
font-size: 16px;
color: #1e293b;
}
.approval-badge {
padding: 4px 12px;
border-radius: 8px;
font-size: 12px;
font-weight: bold;
text-transform: uppercase;
}
.approval-badge.not-required {
background: #10b981;
color: white;
}
.approval-badge.required {
background: #f59e0b;
color: white;
}
.approval-badge.pending {
background: #3b82f6;
color: white;
}
.approval-content {
margin-top: 15px;
}
.approval-content p {
margin: 8px 0;
font-size: 14px;
color: #475569;
}
.approval-workflow {
display: flex;
flex-direction: column;
gap: 10px;
margin-top: 20px;
}
.workflow-step {
padding: 12px;
background: #f8fafc;
border-radius: 10px;
border-left: 4px solid #3b82f6;
font-size: 14px;
color: #475569;
font-weight: 500;
}
.demo-info {
font-size: 12px;
color: #64748b;
text-align: center;
margin-top: 8px !important;
font-style: italic;
}
/* Footer */
.footer {
text-align: center;
padding: 25px;
color: #6b7280;
font-size: 14px;
margin-top: 40px;
border-top: 2px solid #e5e7eb;
background: #f9fafb;
border-radius: 12px;
}
.footer strong {
color: #1e293b;
font-size: 16px;
}
.footer-links {
margin-top: 15px;
display: flex;
justify-content: center;
gap: 20px;
flex-wrap: wrap;
}
.footer-links a {
color: #3b82f6;
text-decoration: none;
font-weight: 500;
transition: color 0.2s ease;
}
.footer-links a:hover {
color: #1d4ed8;
text-decoration: underline;
}
/* Responsive Adjustments */
@media (max-width: 1200px) {
.status-bar {
gap: 10px;
}
.status-item {
font-size: 13px;
padding: 6px 12px;
}
.agent-card {
min-height: 200px;
}
.metric-card {
min-width: 120px;
}
}
/* Gradient backgrounds for panels */
.gradio-container .tab-nav {
background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
border-radius: 12px;
padding: 8px;
margin-bottom: 20px;
}
.gradio-container .tab-nav .selected {
background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%) !important;
color: white !important;
font-weight: 600;
border-radius: 10px;
}
"""