Sync cezen-portal/ from live working copy (V1.0 GA polish + search-icon ordering fix)

Brings the ISO-packaged portal copy current with the live cezen-portal/
working directory, which had drifted across the entire V1.0 GA polish
initiative (Phases 1-10) plus this session's topnav icon-order bugfix.

- 52 existing files updated, 2 new pages added (about.html, health.html)
- cgit/cezen-portal/ is now byte-identical to cezen-portal/
- Backend files (rag_ingest.py, cezen_license.py) already in sync;
  main.py intentionally left as-is (cgit is ahead there with
  workstation-category commercial-fit logic not yet backported to the
  live working copy)

Next: rebuild the ISO (bash autoinstall/build-iso.sh) to bake this in.
This commit is contained in:
Jino Jose committed 2026-07-09 11:11:38 +05:30
1 parent 7540da04a8
commit b3eec34158
57 files changed
+2832 -1354

No files matched your search

+16 -21
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Prompt Studio — Nexus One AI</title>
<link rel="stylesheet" href="style.css?v=4">
<link rel="stylesheet" href="style.css?v=12">
<style>
.ps-layout {
display: grid;
@@ -200,6 +200,7 @@
<a href="dashboard.html">Dashboard</a>
<a href="analytics.html">Usage Analytics</a>
<a href="audit.html">Governance & Audit</a>
<a href="health.html">Health Center</a>
<a href="feedback.html">Feedback &amp; Ratings</a>
<span class="nav-drop-cat">MANAGE /</span>
<a href="users.html">Users</a>
@@ -239,7 +240,7 @@
</div>
</div>
</nav>
<a href="notifications.html" style="position:relative">🔔</a>
<a href="notifications.html" class="nav-icon-btn" style="position:relative" aria-label="Notifications"><span class="icon-svg icon-sm" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M15 17h5l-1.4-1.4A2 2 0 0 1 18 14.2V11a6 6 0 1 0-12 0v3.2a2 2 0 0 1-.6 1.4L4 17h5"/><path d="M10 17a2 2 0 0 0 4 0"/></svg></span></a>
<span class="badge" data-brand="tier">Basic Tier</span>
<div id="nav-org-logo" class="nav-org-logo"></div>
</header>
@@ -249,8 +250,8 @@
<!-- ── Left: Editor ── -->
<div class="ps-editor-panel">
<div class="ps-panel-header">
<span class="ps-panel-title">⚗️ Prompt Studio</span>
<button class="ps-icon-btn" onclick="clearAll()" title="Clear all">✕ Clear</button>
<span class="ps-panel-title">Prompt Studio</span>
<button class="ps-icon-btn" onclick="clearAll()" title="Clear all">Clear</button>
</div>
<div class="ps-panel-body" id="ps-editor-body">
@@ -310,10 +311,10 @@
</div>
<div class="ps-panel-footer">
<button class="ps-run-btn" id="ps-run-btn" onclick="runPrompt()">
<span class="ps-run-icon">▶ Run</span>
<span class="ps-run-icon">Run</span>
<div class="ps-spinner"></div>
</button>
<button class="ps-save-btn" onclick="saveToLibrary()">📚 Save to Prompt Library</button>
<button class="ps-save-btn" onclick="saveToLibrary()">Save to Prompt Library</button>
</div>
</div>
@@ -326,14 +327,14 @@
<span class="ps-stat-chip" id="ps-stat-tokens">–</span>
</div>
<div class="ps-output-actions">
<button class="ps-icon-btn" onclick="copyOutput()" title="Copy response">📋 Copy</button>
<button class="ps-icon-btn" onclick="sendToEval()" title="Send to Eval Suite">🧪 Eval</button>
<button class="ps-icon-btn" onclick="openCompare()" title="Compare with another model">⚖️ Compare</button>
<button class="ps-icon-btn" onclick="copyOutput()" title="Copy response">Copy</button>
<button class="ps-icon-btn" onclick="sendToEval()" title="Send to Eval Suite">Eval</button>
<button class="ps-icon-btn" onclick="openCompare()" title="Compare with another model">Compare</button>
</div>
</div>
<div class="ps-output-body" id="ps-output-body">
<div class="ps-output-empty" id="ps-empty-state">
<div class="ps-empty-icon">⚗️</div>
<div class="ps-empty-icon"><span class="icon-svg icon-2xl" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M9 3h6M10 3v6.5L4.5 19a1 1 0 0 0 .9 1.5h13.2a1 1 0 0 0 .9-1.5L14 9.5V3"/></svg></span></div>
<p>Write a system prompt and message, then hit <strong>Run</strong>.</p>
<p style="font-size:12px;color:var(--lt)">Results appear here with token count and latency.</p>
</div>
@@ -602,9 +603,9 @@ function renderHistory() {
</div>
<div class="ps-history-prompt">${r.user.slice(0,70)}${r.user.length>70?'…':''}</div>
<div class="ps-history-stats">
<span class="ps-history-stat">🕐 ${r.elapsed}s</span>
<span class="ps-history-stat">🔤 ~${r.tokens} tok</span>
<span class="ps-history-stat">🌡 ${r.temp}</span>
<span class="ps-history-stat"><span class="icon-svg icon-xs" aria-hidden="true"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><path d="M12 6v6l4 2"/></svg></span> ${r.elapsed}s</span>
<span class="ps-history-stat"><span class="icon-svg icon-xs" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M4 9h16M4 15h16M10 3 8 21M16 3l-2 18"/></svg></span> ~${r.tokens} tok</span>
<span class="ps-history-stat"><span class="icon-svg icon-xs" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M14 4v10.5a4 4 0 1 1-4 0V4a2 2 0 0 1 4 0z"/></svg></span> ${r.temp}</span>
</div>
</div>
`).join('');
@@ -644,7 +645,7 @@ function clearAll() {
document.getElementById('ps-user').value = '';
document.getElementById('ps-output-body').innerHTML = `
<div class="ps-output-empty" id="ps-empty-state">
<div class="ps-empty-icon">⚗️</div>
<div class="ps-empty-icon"><span class="icon-svg icon-2xl" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="M9 3h6M10 3v6.5L4.5 19a1 1 0 0 0 .9 1.5h13.2a1 1 0 0 0 .9-1.5L14 9.5V3"/></svg></span></div>
<p>Write a system prompt and message, then hit <strong>Run</strong>.</p>
<p style="font-size:12px;color:var(--lt)">Results appear here with token count and latency.</p>
</div>`;
@@ -688,12 +689,6 @@ function handleKey(e) {
if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) runPrompt();
}
function showToast(msg) {
const t = document.getElementById('ps-toast');
t.textContent = msg; t.classList.add('show');
setTimeout(() => t.classList.remove('show'), 2200);
}
// ── Init ──────────────────────────────────────────────────────────────────────
renderHistory();
// Load compare import if arriving from model-compare
@@ -708,6 +703,6 @@ if (compareImport) {
</script>
<script src="auth.js"></script>
<script src="branding.js"></script>
<script src="branding.js?v=3"></script>
</body>
</html>