refactor(ui): enhance dashboard layout with improved sidebar structure, update search bar styles, and implement responsive table scrolling
Build Curio HMS / build-and-deploy (push) Successful in 51s Details

This commit is contained in:
Deep Koluguri 2026-05-24 18:36:17 -04:00
parent a10d1e7cad
commit 5f2862c8a2
4 changed files with 367 additions and 161 deletions

View File

@ -21,6 +21,31 @@
border-right: 1px solid rgba(255, 255, 255, 0.05);
box-shadow: 10px 0 30px rgba(0, 0, 0, 0.2);
z-index: 100;
overflow: hidden;
}
.sidebar-footer {
margin-top: auto;
padding-top: 1.5rem;
border-top: 1px solid rgba(255, 255, 255, 0.1);
flex-shrink: 0;
}
.sidebar-footer .user-profile {
margin-top: 0;
padding-top: 0;
border-top: none;
}
.sidebar-footer .logout-btn {
margin-top: 0.75rem;
padding: 0.75rem 1rem;
}
.build-tag {
font-size: 0.65rem;
color: #94a3b8;
margin-top: 0.25rem;
}
.dashboard-main {
@ -30,86 +55,6 @@
min-height: 100vh;
}
.dash-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 2.5rem;
gap: 2rem;
}
.search-bar {
flex: 1;
max-width: 600px;
position: relative;
display: flex;
align-items: center;
}
.search-icon {
position: absolute;
left: 1.25rem;
color: var(--text-muted);
font-size: 1.1rem;
pointer-events: none;
z-index: 1;
}
.search-bar input {
width: 100%;
padding: 1rem 1.5rem 1rem 3rem;
border-radius: 16px;
border: 1px solid var(--border);
background: var(--surface);
font-size: 0.95rem;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.02);
}
.search-bar input:focus {
outline: none;
border-color: var(--secondary);
background: white;
box-shadow: 0 10px 25px rgba(37, 99, 235, 0.1);
transform: translateY(-2px);
}
.header-actions {
display: flex;
align-items: center;
gap: 1.25rem;
}
.date-picker-group {
display: flex;
align-items: center;
gap: 0.75rem;
background: var(--surface);
padding: 0.65rem 1.25rem;
border-radius: 14px;
border: 1px solid var(--border);
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.02);
transition: all 0.2s;
}
.date-picker-group:hover {
border-color: var(--secondary);
transform: translateY(-1px);
}
.calendar-icon {
font-size: 1.1rem;
}
.date-input {
border: none;
font-family: 'Inter', sans-serif;
font-weight: 600;
color: var(--text-main);
outline: none;
background: transparent;
cursor: pointer;
}
.logo {
display: flex;
align-items: center;
@ -145,6 +90,9 @@
display: flex;
flex-direction: column;
gap: 0.5rem;
flex: 1;
min-height: 0;
overflow-y: auto;
}
.side-nav a {
@ -166,9 +114,6 @@
}
.user-profile {
margin-top: auto;
padding-top: 2rem;
border-top: 1px solid rgba(255, 255, 255, 0.1);
display: flex;
align-items: center;
gap: 0.75rem;
@ -223,12 +168,7 @@
color: #FCA5A5;
}
.sidebar > .logout-btn {
margin-top: auto;
padding: 0.75rem 1rem;
}
.sidebar > .logout-btn:hover {
.sidebar-footer .logout-btn:hover {
background: rgba(239, 68, 68, 0.12);
}
@ -281,6 +221,8 @@
.action-center {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 0.5rem;
background: transparent;
padding: 0;
@ -417,8 +359,8 @@
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: flex-start;
gap: 1.5rem;
align-items: center;
gap: 1.25rem;
margin-bottom: 2rem;
}
@ -446,18 +388,32 @@
.search-bar {
flex: 1;
min-width: 220px;
max-width: 480px;
max-width: 520px;
position: relative;
display: flex;
align-items: center;
}
.search-icon {
position: absolute;
left: 1rem;
color: var(--text-muted);
font-size: 1rem;
pointer-events: none;
z-index: 1;
line-height: 1;
}
.search-bar input {
width: 100%;
padding: 0.875rem 1.25rem;
padding: 0.875rem 1.25rem 0.875rem 2.75rem;
border-radius: var(--radius-md);
border: 1px solid var(--border);
background: var(--surface);
font-size: 0.95rem;
color: var(--text-main);
transition: var(--transition);
box-shadow: var(--shadow-sm);
}
.search-bar input::placeholder {
@ -476,6 +432,15 @@
gap: 0.5rem;
font-size: 0.875rem;
color: var(--text-muted);
background: var(--surface);
padding: 0.5rem 0.85rem;
border-radius: var(--radius-md);
border: 1px solid var(--border);
}
.calendar-icon {
font-size: 1rem;
line-height: 1;
}
.date-input {
@ -567,6 +532,17 @@
gap: 1rem;
}
.table-scroll {
width: 100%;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
border-radius: var(--radius-md);
}
.table-scroll .queue-table {
min-width: 720px;
}
.queue-table {
width: 100%;
border-collapse: collapse;
@ -814,9 +790,11 @@
background: var(--bg);
}
.pipeline-item.next {
.pipeline-item.next,
.pipeline-item.active {
border-color: var(--secondary);
background: rgba(37, 99, 235, 0.05);
background: rgba(37, 99, 235, 0.06);
box-shadow: inset 3px 0 0 var(--secondary);
}
.p-token {
@ -1317,21 +1295,24 @@
/* --- WORLD-CLASS ZEN 4.0 ADD-ONS --- */
.patient-banner-inner {
background: white;
padding: 0.75rem 1.25rem;
border-radius: 12px;
box-shadow: 0 2px 8px rgba(0,0,0,0.02);
padding: 1rem 1.25rem;
border-radius: var(--radius-md);
box-shadow: var(--shadow-sm);
border: 1px solid var(--border);
display: flex;
flex-direction: column;
align-items: stretch;
gap: 0.5rem;
margin-bottom: 0.25rem;
flex-wrap: wrap;
align-items: center;
justify-content: space-between;
gap: 0.75rem 1rem;
margin-bottom: 0.5rem;
}
.patient-identity-row {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
gap: 0.75rem;
width: 100%;
}
@ -1351,11 +1332,23 @@
.zen-layout-3col {
display: grid;
grid-template-columns: 180px minmax(400px, 2.5fr) minmax(280px, 1.2fr);
gap: 1.5rem;
align-items: start;
padding: 1rem;
height: calc(100vh - 120px); /* Fill screen height perfectly without overflow strings */
grid-template-columns: minmax(160px, 200px) minmax(0, 2.5fr) minmax(240px, 320px);
gap: 1.25rem;
align-items: stretch;
padding: 0;
min-height: calc(100vh - 8rem);
}
.zen-sidebar-right {
display: flex;
flex-direction: column;
gap: 1rem;
min-width: 0;
}
.zen-sidebar-right .insight-card,
.zen-sidebar-right .ai-nudge-box {
flex-shrink: 0;
}
.zen-layout-3col.collapsed-queue {
@ -1399,19 +1392,22 @@
.zen-workspace-soap {
display: flex;
flex-direction: column;
gap: 1.5rem;
gap: 1rem;
min-width: 0;
min-height: 0;
}
.soap-container {
display: flex;
flex-direction: column;
gap: 1.25rem;
overflow-y: auto; /* Allow independent scrolling for documentation */
max-height: 100%;
overflow-y: auto;
flex: 1;
min-height: 0;
background: white;
border-radius: 30px;
padding: 2.5rem;
box-shadow: 0 10px 40px rgba(0,0,0,0.02);
border-radius: var(--radius-lg);
padding: 1.5rem;
box-shadow: var(--shadow-sm);
border: 1px solid var(--border);
}
@ -1442,13 +1438,17 @@
font-size: 0.95rem;
line-height: 1.5;
padding: 0.75rem;
border: 1px solid #cbd5e1;
border-radius: 6px;
transition: border-color 0.2s ease;
background: #F8FAFC;
border: 1px solid var(--border);
border-radius: var(--radius-sm);
transition: border-color 0.2s ease, box-shadow 0.2s ease;
background: var(--bg);
color: var(--text-main);
}
.zen-textarea-small::placeholder {
color: var(--text-muted);
}
.zen-textarea-small:focus {
border-color: #3b82f6;
outline: none;
@ -1499,6 +1499,91 @@
}
}
/* Lab watcher & shared form utilities */
.insights-box {
margin-top: 1rem;
color: var(--text-muted);
font-size: 0.9rem;
line-height: 1.55;
}
.insights-box p {
margin-bottom: 0.75rem;
}
.lab-watcher-card {
margin-top: 1.25rem;
}
.lab-watcher-form {
display: flex;
flex-wrap: wrap;
gap: 0.75rem;
align-items: center;
margin-top: 1rem;
}
.form-input {
flex: 1 1 200px;
min-width: 0;
padding: 0.75rem 1rem;
border: 1px solid var(--border);
border-radius: var(--radius-md);
background: var(--bg);
color: var(--text-main);
font-family: inherit;
font-size: 0.95rem;
transition: var(--transition);
}
.form-input:focus {
outline: none;
border-color: var(--secondary);
background: var(--surface);
box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
}
.lab-result-section {
margin-top: 1.25rem;
padding-top: 1.25rem;
border-top: 1px solid var(--border);
}
.lab-result-input {
flex: 1 1 280px;
}
.lab-alerts-container {
margin-top: 1.25rem;
}
.lab-alert-card {
background: #fee2e2;
border-left: 4px solid var(--urgent);
padding: 0.75rem 1rem;
margin-bottom: 0.75rem;
border-radius: var(--radius-sm);
}
.lab-alert-card strong {
color: #991b1b;
}
.lab-alert-card p {
margin: 0.35rem 0 0;
color: #7f1d1d;
font-size: 0.9rem;
}
#labWatcherStatusBadge.badge-active {
background: rgba(16, 185, 129, 0.12);
color: var(--accent);
}
.section-container {
animation: fadeIn 0.35s ease-out forwards;
}
/* Mobile sidebar */
.sidebar-mobile-toggle {
display: none;
@ -1517,15 +1602,61 @@
box-shadow: var(--shadow);
}
.sidebar-backdrop {
display: none;
position: fixed;
inset: 0;
background: rgba(15, 23, 42, 0.45);
z-index: 1040;
}
.sidebar-backdrop.visible {
display: block;
}
@media (max-width: 1200px) {
.queue-section {
grid-template-columns: 1fr;
}
.zen-layout-3col {
grid-template-columns: minmax(140px, 180px) minmax(0, 1fr);
}
.zen-sidebar-right {
grid-column: 1 / -1;
flex-direction: row;
flex-wrap: wrap;
}
.zen-sidebar-right .insight-card,
.zen-sidebar-right .ai-nudge-box {
flex: 1 1 280px;
}
}
@media (max-width: 1024px) {
.queue-section,
.dashboard-main {
padding: 2rem 1.5rem;
}
.zen-layout,
.zen-grid {
grid-template-columns: 1fr;
}
}
.revenue-grid {
grid-template-columns: 1fr;
@media (min-width: 769px) {
.sidebar-mobile-toggle {
display: none !important;
}
.sidebar {
transform: translateX(0) !important;
}
.sidebar-backdrop {
display: none !important;
}
}
@ -1544,29 +1675,79 @@
transform: translateX(0);
}
.sidebar.compact-rail {
width: var(--sidebar-width);
padding: 2.5rem 1.5rem;
align-items: stretch;
}
.sidebar.compact-rail .logo-text,
.sidebar.compact-rail .user-profile .info,
.sidebar.compact-rail .nav-text {
display: block !important;
}
.sidebar.compact-rail .side-nav a {
width: auto;
height: auto;
padding: 0.75rem 1rem;
justify-content: flex-start;
}
.sidebar.compact-rail + .dashboard-main,
.dashboard-main {
margin-left: 0;
padding: 1.25rem;
padding-top: 4rem;
padding-top: 4.5rem;
}
.dash-header {
flex-direction: column;
align-items: stretch;
}
.header-actions {
width: 100%;
}
.header-actions .btn-primary {
width: 100%;
}
.search-bar {
max-width: none;
width: 100%;
}
.zen-layout-3col {
grid-template-columns: 1fr !important;
height: auto;
min-height: auto;
gap: 1rem;
}
.zen-sidebar-right {
flex-direction: column;
}
.zen-pipeline.full-height {
height: auto;
max-height: none;
position: static;
}
.patient-identity-row {
flex-direction: column;
align-items: flex-start;
}
.patient-identity-row .allergy-tag {
align-self: stretch;
text-align: center;
}
.soap-container {
padding: 1rem;
}
}
/* Utility Hidden */

View File

@ -4,16 +4,17 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dashboard | Curio</title>
<link rel="stylesheet" href="globals.css?v=26">
<link rel="stylesheet" href="index.css?v=26">
<link rel="stylesheet" href="dashboard.css?v=99">
<link rel="stylesheet" href="globals.css?v=27">
<link rel="stylesheet" href="dashboard.css?v=100">
<link rel="stylesheet" href="settings.css?v=27">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Outfit:wght@500;600;700&display=swap" rel="stylesheet">
<script src="tenantLoader.js?v=26"></script>
</head>
<body class="dashboard-body">
<div class="sidebar-mobile-toggle" onclick="toggleSidebar()">☰ Menu</div>
<div class="sidebar-backdrop" id="sidebarBackdrop" onclick="toggleSidebar()" aria-hidden="true"></div>
<button type="button" class="sidebar-mobile-toggle" onclick="toggleSidebar()" aria-label="Open navigation menu" aria-expanded="false" id="sidebarMenuBtn">☰ Menu</button>
<aside class="sidebar" id="sidebar">
<div class="logo">
<span class="logo-icon">C</span>
@ -29,22 +30,24 @@
<a href="staff.html" data-section="staff" data-external><span>👤</span> <span class="nav-text">Staff & Payroll</span></a>
<a href="#" data-section="settings"><span>⚙️ </span> <span class="nav-text">Settings</span></a>
</nav>
<div class="user-profile">
<div class="avatar">DS</div>
<div class="info">
<strong>Dr. Sharma</strong>
<span>Cardiologist</span>
<div style="font-size: 0.65rem; color: #94a3b8; margin-top: 0.25rem;">Build: 1.4.0-ZEN</div>
<div class="sidebar-footer">
<div class="user-profile">
<div class="avatar">DS</div>
<div class="info">
<strong>Dr. Sharma</strong>
<span>Cardiologist</span>
<div class="build-tag">Build: 1.4.0-ZEN</div>
</div>
</div>
<a href="login.html" class="logout-btn"><span>🚪</span> <span class="nav-text">Logout</span></a>
</div>
<a href="login.html" class="logout-btn"><span>🚪</span> <span class="nav-text">Logout</span></a>
<textarea id="consultationNotes" style="position: absolute; width: 1px; height: 1px; opacity: 0.01; pointer-events: none;"></textarea>
</aside>
<main class="dashboard-main">
<header class="dash-header">
<div class="search-bar">
<span class="search-icon">🔍</span>
<span class="search-icon" aria-hidden="true">🔍</span>
<input type="text" id="patientSearch" placeholder="Search patients by name or WhatsApp number..." aria-label="Search patients">
</div>
<div class="header-actions">
@ -228,7 +231,7 @@
<div class="stat-card">
<span>In Queue</span>
<h3>12 Patients</h3>
<small class="text-accent">↑ 4 since last hour</small>
<small class="text-accent"> 4 since last hour</small>
</div>
<div class="stat-card quota-card">
<span>Current Slot (10:00-10:30)</span>
@ -260,6 +263,7 @@
<span class="badge muted">Walk-ins</span>
</div>
</div>
<div class="table-scroll">
<table class="queue-table">
<thead>
<tr>
@ -306,6 +310,7 @@
</tr>
</tbody>
</table>
</div>
</div>
<div class="side-panel">
@ -327,6 +332,7 @@
<h2>Patient Records</h2>
<button class="btn-primary">+ Add New Patient</button>
</div>
<div class="table-scroll">
<table class="queue-table">
<thead>
<tr>
@ -349,6 +355,7 @@
</tr>
</tbody>
</table>
</div>
</section>
</div>
@ -365,6 +372,7 @@
<div class="stat-card"><span>Total Inventory Value</span><h3>₹4,25,000</h3></div>
<div class="stat-card"><span>Daily Sales (GST)</span><h3>₹12,450</h3></div>
</div>
<div class="table-scroll">
<table class="queue-table">
<thead>
<tr>
@ -382,6 +390,7 @@
<tr><td>M03</td><td><strong>Cough Syrup</strong></td><td>S881</td><td><span class="text-accent">Apr 2026</span></td><td>4</td><td>₹85</td><td><button class="btn-small secondary">Restock</button></td></tr>
</tbody>
</table>
</div>
</section>
</div>
@ -391,6 +400,7 @@
<h2>🔬 Laboratory Orders</h2>
<span class="badge">4 New Orders</span>
</div>
<div class="table-scroll">
<table class="queue-table">
<thead>
<tr>
@ -406,32 +416,32 @@
<tr><td>LAB-101</td><td><strong>Rahul Verma</strong></td><td>CBC (Complete Blood Count)</td><td><span class="triage-pill urgent">High</span></td><td><span class="status-pill waiting">Sample Awaited</span></td><td><button class="btn-small">Collect Sample</button></td></tr>
</tbody>
</table>
</div>
</section>
<!-- AI Lab Watcher Widget -->
<section class="section-card" style="margin-top: 20px;">
<section class="section-card lab-watcher-card">
<div class="card-header">
<h2>🤖 AI Lab Anomaly Watcher</h2>
<span id="labWatcherStatusBadge" class="badge">Offline</span>
</div>
<div class="insights-box" style="margin-top: 15px;">
<div class="insights-box">
<p>The AI Watcher runs continuously in the background using Temporal to monitor patient lab results for dangerous drug interactions or baseline anomalies.</p>
<div style="margin-top: 15px;">
<input type="text" id="labPatientId" placeholder="Patient ID (e.g. PAT-123)" class="form-input" style="width: 200px; display: inline-block;">
<input type="text" id="labBaseline" placeholder="Mock Baseline (e.g. Patient is on Warfarin)" class="form-input" style="width: 300px; display: inline-block; margin-left: 10px;">
<button id="startWatcherBtn" class="btn-primary" style="margin-left: 10px;">Start Watcher</button>
<div class="lab-watcher-form">
<input type="text" id="labPatientId" placeholder="Patient ID (e.g. PAT-123)" class="form-input">
<input type="text" id="labBaseline" placeholder="Mock Baseline (e.g. Patient is on Warfarin)" class="form-input">
<button type="button" id="startWatcherBtn" class="btn-primary">Start Watcher</button>
</div>
<div id="labResultInputSection" class="hidden" style="margin-top: 20px; border-top: 1px solid #ddd; padding-top: 15px;">
<div id="labResultInputSection" class="lab-result-section hidden">
<p><strong>Submit New Lab Result</strong></p>
<input type="text" id="newLabResult" placeholder="e.g. High INR 6.5" class="form-input" style="width: 400px; display: inline-block;">
<button id="submitLabBtn" class="btn-primary" style="margin-left: 10px;">Send to AI Watcher</button>
<div class="lab-watcher-form">
<input type="text" id="newLabResult" placeholder="e.g. High INR 6.5" class="form-input lab-result-input">
<button type="button" id="submitLabBtn" class="btn-primary">Send to AI Watcher</button>
</div>
</div>
<div id="aiAlertsContainer" style="margin-top: 20px;">
<!-- AI Alerts will be dynamically rendered here -->
</div>
<div id="aiAlertsContainer" class="lab-alerts-container"></div>
</div>
</section>
</div>
@ -451,7 +461,7 @@
<span aria-hidden="true">🎙️</span> Record consultation
</button>
<div id="recordingStatus" class="rx-recording-status hidden">
<span class="pulse"></span> Recording in progress…
<span class="pulse"></span> Recording in progress
</div>
</div>
@ -515,12 +525,12 @@
<button type="button" class="rx-tip-btn" onclick="shareTip('diabetes')">🥗 Diabetes diet</button>
<button type="button" class="rx-tip-btn" onclick="shareTip('hypertension')">🧘 BP control</button>
<button type="button" class="rx-tip-btn" onclick="shareTip('viral')">💧 Hydration</button>
<button type="button" class="rx-tip-btn" onclick="printTips()">🖨️ Print tips</button>
<button type="button" class="rx-tip-btn" onclick="printTips()">🖨️ Print tips</button>
</div>
</section>
<section class="rx-sidebar-block">
<label class="rx-label" for="deptNote">Note to departments</label>
<textarea id="deptNote" class="rx-textarea" placeholder="Instructions for pharmacy or lab…" rows="3"></textarea>
<textarea id="deptNote" class="rx-textarea" placeholder="Instructions for pharmacy or lab" rows="3"></textarea>
</section>
</aside>
</div>
@ -533,7 +543,7 @@
</div>
</main>
<script src="dashboard.js?v=99"></script>
<script src="dashboard.js?v=100"></script>
</body>
</html>

View File

@ -289,7 +289,10 @@ window.showSection = (sectionId) => {
setActiveNavLink(sectionId);
if (window.innerWidth <= 768) {
document.getElementById('sidebar')?.classList.remove('open');
const sidebar = document.getElementById('sidebar');
sidebar?.classList.remove('open');
document.getElementById('sidebarBackdrop')?.classList.remove('visible');
document.getElementById('sidebarMenuBtn')?.setAttribute('aria-expanded', 'false');
}
return false;
@ -456,11 +459,17 @@ window.switchPatientContext = (name, token, triage) => {
if (patientHeading) {
patientHeading.innerHTML = `${name} <small>(28y, M)</small>`;
}
document.querySelectorAll('.pipeline-item').forEach(item => {
const itemToken = item.querySelector('.p-token')?.textContent?.trim();
item.classList.toggle('next', itemToken === token);
item.classList.toggle('active', itemToken === token);
});
};
// 5. Global Helpers & Modal Handlers
window.openHistory = () => {
const heading = document.querySelector(".patient-identity h1");
const heading = document.querySelector(".patient-identity-row h1, .patient-identity h1");
const name = heading ? heading.innerText.split(' (')[0] : 'Patient';
alert(`📂 Loading History for ${name}...\n\n- Visit (05/12/26): Chronic Gastritis`);
};
@ -476,7 +485,12 @@ window.openConsultation = () => {
window.shareSummary = () => alert("📤 Summary sent to Patient's WhatsApp.");
window.printSummary = () => alert("🖨️ Printing Handover Note...");
window.toggleSidebar = () => {
document.getElementById('sidebar')?.classList.toggle('open');
const sidebar = document.getElementById('sidebar');
const backdrop = document.getElementById('sidebarBackdrop');
const menuBtn = document.getElementById('sidebarMenuBtn');
const isOpen = sidebar?.classList.toggle('open');
backdrop?.classList.toggle('visible', !!isOpen);
if (menuBtn) menuBtn.setAttribute('aria-expanded', isOpen ? 'true' : 'false');
};
function closeRxModal() {
@ -644,7 +658,7 @@ if (startWatcherBtn) {
if (data.success) {
activeWatcherPatientId = patientId;
labWatcherStatusBadge.innerText = "Active (Monitoring)";
labWatcherStatusBadge.style.backgroundColor = "var(--success-color)";
labWatcherStatusBadge.classList.add('badge-active');
labResultInputSection.classList.remove("hidden");
startWatcherBtn.innerText = "Watcher Running";
@ -729,10 +743,10 @@ function renderAlerts(alerts) {
alerts.forEach((alert, index) => {
if (alert.is_dangerous) {
html += `
<div style="background-color: #fee2e2; border-left: 4px solid #ef4444; padding: 10px; margin-bottom: 10px; border-radius: 4px;">
<strong style="color: #991b1b;">Alert #${index + 1}</strong>
<p style="margin: 5px 0; color: #7f1d1d;">${alert.danger_explanation}</p>
<p style="margin: 0; font-size: 0.9em; color: #991b1b;"><strong>Action:</strong> ${alert.recommended_action}</p>
<div class="lab-alert-card">
<strong>Alert #${index + 1}</strong>
<p>${alert.danger_explanation}</p>
<p><strong>Action:</strong> ${alert.recommended_action}</p>
</div>
`;
}

View File

@ -6,6 +6,7 @@
--secondary-hover: #1D4ED8;
--accent: #059669; /* Darker green for accessibility */
--accent-hover: #047857;
--success-color: #059669;
--urgent: #EF4444;
--warning: #F59E0B;