/* Clinically Healthcare UI Design Kit Styles (Gradio-Optimized) */ :root { --primary-indigo: #4338CA; --secondary-cyan: #0891B2; --bg-cream: #F8FAFC; --border-soft: #CBD5E1; --text-slate: #0F172A; --text-muted: #334155; --success-green: #059669; --warning-amber: #D97706; --danger-red: #DC2626; --white: #FFFFFF; } /* Header */ .header-box { background: var(--white); padding: 1.5rem; border-bottom: 4px solid var(--primary-indigo); color: var(--primary-indigo); text-align: center; box-shadow: 0 4px 16px rgba(67, 56, 202, 0.12); } .header-box h1 { font-weight: 800; font-size: 2.25rem; letter-spacing: -0.025em; margin: 0; color: var(--primary-indigo); } /* Sidebar Buttons */ .sidebar-btn { margin-bottom: 10px !important; font-weight: 600 !important; border-radius: 12px !important; border: 1px solid var(--border-soft) !important; background: var(--white) !important; transition: all 0.2s ease !important; color: var(--text-slate) !important; width: 100%; } .sidebar-btn:hover { background: var(--primary-indigo) !important; border-color: var(--primary-indigo) !important; color: var(--white) !important; transform: translateY(-1px); box-shadow: 0 6px 18px rgba(67, 56, 202, 0.35); } /* Status blocks */ .vibrant-status .label-wrap span { color: white !important; font-weight: 700 !important; } .vibrant-status textarea { color: white !important; background: rgba(255, 255, 255, 0.12) !important; border: 1px solid rgba(255, 255, 255, 0.25) !important; border-radius: 8px !important; min-height: 44px; } /* Status variants */ .status-green { background: rgba(5, 150, 105, 0.15) !important; border: 1px solid var(--success-green) !important; color: #064E3B !important; border-radius: 8px !important; padding: 8px 12px !important; } .status-orange { background: rgba(217, 119, 6, 0.15) !important; border: 1px solid var(--warning-amber) !important; color: #78350F !important; border-radius: 8px !important; padding: 8px 12px !important; } .status-red { background: rgba(220, 38, 38, 0.15) !important; border: 1px solid var(--danger-red) !important; color: #7F1D1D !important; border-radius: 8px !important; padding: 8px 12px !important; } /* Live monitoring alerts */ .live-notifications { background: #fff5f2; border: 2px solid #dc2626; border-radius: 12px; padding: 0.9rem; margin-top: 0.75rem; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.08); opacity: 1 !important; filter: none !important; -webkit-filter: none !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; transform: none !important; -webkit-transform: none !important; will-change: auto !important; transition: none !important; } .live-notifications *, .live-notifications .notification-item, .live-notifications .notification-item * { opacity: 1 !important; filter: none !important; -webkit-filter: none !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; transform: none !important; transition: none !important; } .live-notifications.empty { background: #f0fdf4; border-color: #059669; } .live-notifications.empty.no-patients, .live-notifications.empty .notification-badge { background: linear-gradient(135deg, #059669, #047857); box-shadow: 0 2px 8px rgba(5, 150, 105, 0.35); } .live-notifications.empty .notification-header { color: #064E3B; } .live-notifications.empty.no-patients .notification-header { color: #064E3B; } .notification-header { display: flex; align-items: center; gap: 0.6rem; font-weight: 800; margin-bottom: 0.7rem; color: #111827; letter-spacing: 0.01em; } .notification-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 30px; height: 30px; padding: 0 0.35rem; border-radius: 999px; background: linear-gradient(135deg, #dc2626, #b91c1c); color: white; font-size: 0.95rem; font-weight: 800; box-shadow: 0 2px 8px rgba(220, 38, 38, 0.35); } .notification-list { display: flex; flex-direction: column; gap: 0.45rem; } .notification-item { display: flex; flex-direction: column; gap: 0.25rem; padding: 0.7rem 0.8rem; border-radius: 10px; font-size: 0.95rem; font-weight: 700; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.35); opacity: 1 !important; filter: none !important; -webkit-filter: none !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; transform: none !important; -webkit-transform: none !important; will-change: auto !important; } .notification-item.notification-orange { background: linear-gradient(135deg, #fef3c7, #fde68a); border: 2px solid #f59e0b; color: #92400e; text-shadow: 0 0 0 rgba(0, 0, 0, 0); } .notification-item.notification-red { background: linear-gradient(135deg, #fee2e2, #fecaca); border: 2px solid #dc2626; color: #991b1b; text-shadow: 0 0 0 rgba(0, 0, 0, 0); } .notification-title { font-size: 0.98rem; font-weight: 800; } .notification-message { font-size: 0.92rem; font-weight: 700; line-height: 1.35; } .notification-body { color: #475569; font-size: 0.95rem; font-weight: 600; } /* Loading spinner */ .loading-spinner { display: inline-flex; align-items: center; gap: 10px; color: var(--primary-indigo); font-weight: 600; } .loading-spinner::before { content: ""; display: inline-block; width: 18px; height: 18px; border: 3px solid rgba(67, 56, 202, 0.2); border-top-color: var(--primary-indigo); border-radius: 50%; animation: hr-spin 0.8s linear infinite; } @keyframes hr-spin { to { transform: rotate(360deg); } } /* Page layout */ .page-container { padding: 0.5rem 1.5rem 2rem 1.5rem; background: var(--bg-cream); } .page-title { font-size: 1.25rem; font-weight: 700; color: var(--text-slate); margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--border-soft); } /* Inputs */ input, textarea, select { border-color: var(--border-soft) !important; color: var(--text-slate); } input:focus, textarea:focus, select:focus { border-color: var(--primary-indigo) !important; box-shadow: 0 0 0 3px rgba(67, 56, 202, 0.15) !important; } /* ========================================================= 🔥 GRADIO OVERRIDE ENFORCER LAYER (IMPORTANT PART) ========================================================= */ /* 1. Hard reset Gradio container interference */ .gradio-container { background: var(--bg-cream) !important; } /* 2. FORCE header styling (highest practical CSS specificity) */ body .gradio-container div.header-box, html body .gradio-container div.header-box, div.gradio-container div.header-box { background: #0B1F3B !important; /* deep navy override */ color: #FFFFFF !important; border-bottom: 4px solid var(--primary-indigo) !important; box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25) !important; } /* 3. Force all text inside header */ body .gradio-container .header-box * { color: #FFFFFF !important; } /* 4. Kill any theme pseudo overlays */ .header-box::before, .header-box::after { background: transparent !important; content: none !important; } /* 5. Prevent Gradio theme bleed on blocks */ .gr-block, .gr-box, .gr-panel { background: transparent !important; } /* 6. Kill blur effects on live monitoring container during streaming */ .gradio-container .live-notifications, .gradio-container .monitor_alerts_sidebar { filter: none !important; -webkit-filter: none !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; opacity: 1 !important; } /* 7. Ensure HTML components don't get blurred during updates */ .gr-html, .gr-html * { filter: none !important; -webkit-filter: none !important; backdrop-filter: none !important; -webkit-backdrop-filter: none !important; opacity: 1 !important; transform: none !important; -webkit-transform: none !important; transition: none !important; }