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:
1 parent
7540da04a8
commit
b3eec34158
57 files changed
+2832
-1354
No files matched your search
@@ -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 & 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,'&').replace(/</g,'<').replace(/>/g,'>');
|
||||
}
|
||||
@@ -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>
|
||||
Reference in new issue
Block a user