refactor: apply refined 15-60-25 Zen 4.0 layout, move patient banner to center column, update scribe UI states
Build Curio HMS / build-and-deploy (push) Successful in 49s Details

This commit is contained in:
Deep Koluguri 2026-05-23 11:33:35 -04:00
parent 6058f9a862
commit 78e95bfc17
3 changed files with 47 additions and 42 deletions

View File

@ -1313,7 +1313,7 @@
} }
/* --- WORLD-CLASS ZEN 4.0 ADD-ONS --- */ /* --- WORLD-CLASS ZEN 4.0 ADD-ONS --- */
.safety-header { .patient-banner-inner {
background: white; background: white;
padding: 1.5rem 2.5rem; padding: 1.5rem 2.5rem;
border-radius: 20px; border-radius: 20px;
@ -1322,10 +1322,7 @@
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
margin-bottom: 2rem; margin-bottom: 0.5rem;
position: sticky;
top: 1rem;
z-index: 10;
} }
.patient-identity-row { .patient-identity-row {
@ -1350,14 +1347,14 @@
.zen-layout-3col { .zen-layout-3col {
display: grid; display: grid;
grid-template-columns: 15% 55% 30%; grid-template-columns: 15% 60% 25%;
gap: 2rem; gap: 1.5rem;
align-items: start; align-items: start;
transition: grid-template-columns 0.3s ease; transition: grid-template-columns 0.3s ease;
} }
.zen-layout-3col.collapsed-queue { .zen-layout-3col.collapsed-queue {
grid-template-columns: 5% 65% 30%; grid-template-columns: 5% 70% 25%;
} }
.zen-pipeline { .zen-pipeline {
@ -1367,7 +1364,14 @@
box-shadow: 0 4px 20px rgba(0,0,0,0.03); box-shadow: 0 4px 20px rgba(0,0,0,0.03);
border: 1px solid var(--border); border: 1px solid var(--border);
transition: all 0.3s ease; transition: all 0.3s ease;
overflow: hidden; overflow-x: hidden;
}
.zen-pipeline.full-height {
height: calc(100vh - 5rem);
overflow-y: auto;
position: sticky;
top: 1rem;
} }
.zen-pipeline.collapsed { .zen-pipeline.collapsed {

View File

@ -111,30 +111,10 @@
</div> </div>
</div> </div>
<!-- DOCTOR ZEN VIEW (Clinical Focus) -->
<div id="doctor-zen-section" class="hidden"> <div id="doctor-zen-section" class="hidden">
<!-- Persistent Safety Header -->
<div class="safety-header">
<div class="patient-identity-row">
<span class="pill active">Now Seeing</span>
<h1>Rahul Verma <small>(28y, M)</small></h1>
<span class="pill triage">#012 • Viral Fever Triage</span>
<span class="allergy-tag urgent-alert">‼️ PEANUTS ALLERGY</span>
</div>
<div class="action-center">
<select id="scribeLang" class="lang-select">
<option value="en-US">English</option>
<option value="te-IN">తెలుగు</option>
</select>
<button id="zenScribeBtn" class="btn-zen scribe" onclick="toggleZenScribe()">🎙️ Scribe</button>
<button class="btn-zen history" onclick="openHistory()">📂 History</button>
<button class="btn-zen start" onclick="openConsultation()">✍️ Start</button>
</div>
</div>
<div class="zen-layout-3col"> <div class="zen-layout-3col">
<!-- Left: Collapsible Queue (15%) --> <!-- Left: Full-Height Queue (15%) -->
<aside class="zen-pipeline" id="zenPipeline"> <aside class="zen-pipeline full-height" id="zenPipeline">
<div class="pipeline-header"> <div class="pipeline-header">
<h3>Queue <small>(Ctrl+Q)</small></h3> <h3>Queue <small>(Ctrl+Q)</small></h3>
<span class="badge">4 Waiting</span> <span class="badge">4 Waiting</span>
@ -157,8 +137,23 @@
</div> </div>
</aside> </aside>
<!-- Center: Structured SOAP Workspace (55%) --> <!-- Center: Core Workspace (60%) -->
<main class="zen-workspace-soap"> <main class="zen-workspace-soap">
<div class="patient-banner-inner">
<div class="patient-identity-row">
<h1>Rahul Verma <small>(28y, M)</small></h1>
<span class="allergy-tag urgent-alert">⚠️ ALLERGY: PEANUTS</span>
</div>
<div class="action-center">
<select id="scribeLang" class="lang-select">
<option value="en-US">English</option>
<option value="te-IN">తెలుగు</option>
</select>
<button id="zenScribeBtn" class="btn-zen scribe pulse-active" onclick="toggleZenScribe()">🔴 Start Recording</button>
<button class="btn-zen history" onclick="openHistory()">📂 History</button>
</div>
</div>
<div id="scribeStatus" class="scribe-status-bar hidden"> <div id="scribeStatus" class="scribe-status-bar hidden">
<span class="pulse-dot"></span> <span id="scribeStatusText">AI Scribe Recording... (Ctrl+Shift+S to Pause)</span> <span class="pulse-dot"></span> <span id="scribeStatusText">AI Scribe Recording... (Ctrl+Shift+S to Pause)</span>
</div> </div>
@ -195,22 +190,22 @@
</div> </div>
</main> </main>
<!-- Right: AI Assistant & Vitals (30%) --> <!-- Right: Clinical Context & AI Insights (25%) -->
<aside class="zen-sidebar-right"> <aside class="zen-sidebar-right">
<div class="insight-card"> <div class="insight-card">
<div class="card-header">🩺 Vitals Widget</div> <div class="card-header">🩺 Vitals Widget</div>
<div class="vitals-grid"> <div class="vitals-grid">
<div class="vital-item"> <div class="vital-item">
<span class="label">Temp</span> <span class="label">Temp</span>
<span class="value" id="vital-temp">98.6°F</span> <span class="value" id="vital-temp">98.6°F 🟢</span>
</div> </div>
<div class="vital-item warning"> <div class="vital-item warning">
<span class="label">BP</span> <span class="label">BP</span>
<span class="value" id="vital-bp">140/90</span> <span class="value" id="vital-bp">140/90 🔴</span>
</div> </div>
<div class="vital-item"> <div class="vital-item">
<span class="label">SpO2</span> <span class="label">SpO2</span>
<span class="value" id="vital-spo2">98%</span> <span class="value" id="vital-spo2">98% 🟢</span>
</div> </div>
</div> </div>
</div> </div>
@ -219,8 +214,8 @@
<div class="card-header">✨ AI Suggestions</div> <div class="card-header">✨ AI Suggestions</div>
<p id="aiNudgeText">Listening for diagnosis...</p> <p id="aiNudgeText">Listening for diagnosis...</p>
<div class="suggested-tags"> <div class="suggested-tags">
<span>#ViralFever</span> <span>ICD-10: B34.9 (Viral)</span>
<span>#FluProtocols</span> <span>Rx: Paracetamol</span>
</div> </div>
</div> </div>
</aside> </aside>
@ -537,6 +532,6 @@
</div> </div>
</main> </main>
<script src="dashboard.js?v=21"></script> <script src="dashboard.js?v=22"></script>
</body> </body>
</html> </html>

View File

@ -307,12 +307,12 @@ function updateScribeUI() {
if (!btn || !status) return; if (!btn || !status) return;
if (isScribing) { if (isScribing) {
btn.innerHTML = "🛑 Stop Scribe"; btn.innerHTML = "⏸️ Pause Scribe";
btn.style.background = "#EF4444"; btn.style.background = "#EF4444";
btn.style.color = "white"; btn.style.color = "white";
status.classList.remove("hidden"); status.classList.remove("hidden");
} else { } else {
btn.innerHTML = "🎙️ Scribe"; btn.innerHTML = "🔴 Start Recording";
btn.style.background = ""; // Resets to CSS default btn.style.background = ""; // Resets to CSS default
btn.style.color = ""; btn.style.color = "";
status.classList.add("hidden"); status.classList.add("hidden");
@ -345,7 +345,13 @@ async function processWithWhisper(blob) {
}); });
const data = await res.json(); const data = await res.json();
if (data.text) { if (data.text) {
document.getElementById("consultationNotes").value += "\n[DEEP SCRIBE]: " + data.text; const activeField = document.activeElement;
if (activeField && activeField.tagName === 'TEXTAREA' && activeField.id.startsWith('soap-')) {
activeField.value += "\n[DEEP SCRIBE]: " + data.text;
} else {
const defaultField = document.getElementById("soap-s");
if (defaultField) defaultField.value += "\n[DEEP SCRIBE]: " + data.text;
}
generateSummary(true); generateSummary(true);
} }
} catch (e) { } catch (e) {