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

+13 -4
View File
@@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Appliance Ops — Nexus One AI</title>
<link rel="stylesheet" href="style.css?v=4">
<link rel="stylesheet" href="style.css?v=12">
<style>
.content { max-width:1180px; }
.ops-grid { display:grid; grid-template-columns:repeat(12,1fr); gap:16px; align-items:stretch; }
@@ -130,6 +130,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>
@@ -257,6 +258,14 @@
<script>
let readinessData = null;
// Shared with every other page via branding.js's window.licenseStatusLabel —
// translates raw codes (valid/missing/expired/invalid_signature/
// not_yet_valid/machine_mismatch) into plain English. Falls back to the raw
// code only in the unlikely event branding.js hasn't loaded yet.
function licenseStatusLabel(status) {
return window.licenseStatusLabel ? window.licenseStatusLabel(status) : (status || 'Unknown');
}
function esc(v) {
return String(v ?? '—').replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
}
@@ -290,7 +299,7 @@ function renderReadiness(d) {
statusEl.textContent = status.replace(/_/g, ' ');
statusEl.className = 'pill ' + (status === 'ready' ? 'ok' : status === 'limited' ? 'warn' : 'bad');
document.getElementById('license-tier').textContent = d.license?.label || '—';
document.getElementById('license-position').textContent = `${d.license?.positioning || '—'} · status: ${entitlement.license_status || d.license?.license_status || 'unknown'}`;
document.getElementById('license-position').textContent = `${d.license?.positioning || '—'} · status: ${licenseStatusLabel(entitlement.license_status || d.license?.license_status || 'missing')}`;
const auditFit = d.commercial_fit || {};
const rec = d.feasibility?.recommendation || {};
@@ -314,7 +323,7 @@ function renderReadiness(d) {
].map(row => `<div class="ops-row"><div class="ops-label">${esc(row[0])}</div><div class="ops-value">${esc(row[1])}</div></div>`).join('');
document.getElementById('entitlement-list').innerHTML = [
['License status', entitlement.license_status || '—'],
['License status', entitlement.license_status ? licenseStatusLabel(entitlement.license_status) : '—'],
['Customer', entitlement.license_record?.customer_name || '—'],
['Licensed tier', entitlement.licensed_tier || '—'],
['Provisioned tier', entitlement.provisioned_tier || '—'],
@@ -448,6 +457,6 @@ function exportReadiness() {
loadAll();
</script>
<script src="auth.js"></script>
<script src="branding.js"></script>
<script src="branding.js?v=3"></script>
</body>
</html>