← back to Rentv V1
rentv-v1 admin: add clean nav (Dashboards/Publish/Blog/Main site) + mobile hamburger to all 10 admin versions
ff9b76e0405132e2584f6e64b65fd33e53116550 · 2026-07-21 16:06:04 -0700 · Steve Abrams
Files touched
M admin-versions.mjsM public/admin/analytics.htmlM public/admin/cards.htmlM public/admin/classic.htmlM public/admin/command.htmlM public/admin/console.htmlM public/admin/index.htmlM public/admin/kanban.htmlM public/admin/minimal.htmlM public/admin/sidebar.htmlM public/admin/split.htmlM public/admin/table.html
Diff
commit ff9b76e0405132e2584f6e64b65fd33e53116550
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Tue Jul 21 16:06:04 2026 -0700
rentv-v1 admin: add clean nav (Dashboards/Publish/Blog/Main site) + mobile hamburger to all 10 admin versions
---
admin-versions.mjs | 11 ++++++++++-
public/admin/analytics.html | 11 ++++++++++-
public/admin/cards.html | 11 ++++++++++-
public/admin/classic.html | 11 ++++++++++-
public/admin/command.html | 11 ++++++++++-
public/admin/console.html | 11 ++++++++++-
public/admin/index.html | 7 +++++++
public/admin/kanban.html | 11 ++++++++++-
public/admin/minimal.html | 11 ++++++++++-
public/admin/sidebar.html | 11 ++++++++++-
public/admin/split.html | 11 ++++++++++-
public/admin/table.html | 11 ++++++++++-
12 files changed, 117 insertions(+), 11 deletions(-)
diff --git a/admin-versions.mjs b/admin-versions.mjs
index eba1112..21ce573 100644
--- a/admin-versions.mjs
+++ b/admin-versions.mjs
@@ -30,14 +30,23 @@ a{color:inherit;text-decoration:none}.wrap{max-width:1240px;margin:0 auto;paddin
.abrand{font-family:'Playfair Display',serif;font-size:20px}.abrand span{color:var(--a)}.abrand small{font-family:'Inter';font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--sub);margin-left:8px}
.abar a{font-size:12px;color:var(--sub)}.abar a:hover{color:var(--ink)}
.ah{padding:20px 0 4px}.ah h1{font-size:20px}.ah p{color:var(--sub);font-size:13px}
-#app{padding:18px 0 60px;min-height:60vh}`;
+#app{padding:18px 0 60px;min-height:60vh}
+.anav{background:var(--pan);border-bottom:1px solid var(--ln);position:sticky;top:0;z-index:20}
+.anav .wrap{display:flex;gap:2px;align-items:center;height:44px}
+.aham{display:none;background:none;border:0;font-size:22px;line-height:1;color:var(--ink);cursor:pointer;margin-left:auto;padding:6px 10px 6px 0}
+.anl{display:flex;gap:4px;align-items:center;overflow-x:auto}
+.anav a{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--sub);padding:11px 12px;white-space:nowrap;border-bottom:3px solid transparent}
+.anav a:hover{color:var(--a);border-color:var(--a)}
+@media(max-width:820px){.aham{display:block}.anl{display:none;position:absolute;top:44px;left:0;right:0;background:var(--pan);flex-direction:column;align-items:stretch;border-bottom:1px solid var(--ln);box-shadow:0 12px 26px rgba(0,0,0,.4);z-index:30}.anl.open{display:flex}.anl a{padding:13px 20px;border-bottom:1px solid var(--ln)}}`;
function page(key, title, desc) {
return `<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>RENTV Admin — ${title}</title><link href="${GF}" rel="stylesheet"><style>${SHELL}</style></head>
<body data-ver="${key}" class="ver-${key}">
<div class="abar"><div class="wrap"><div class="abrand">REN<span>TV</span> Admin<small>${title}</small></div><a href="/admin">← all 10 admin versions</a></div></div>
+<div class="anav"><div class="wrap"><button class="aham" id="ahb" aria-label="Menu" aria-expanded="false">☰</button><div class="anl" id="anl"><a href="/admin">Dashboards</a><a href="/admin/publish">Publish</a><a href="/blog">Blog</a><a href="/">Main site ↗</a></div></div></div>
<div class="wrap"><div class="ah"><h1>${title}</h1><p>${desc} · live gated data</p></div><main id="app"><p style="color:var(--sub);padding:30px">Loading admin data…</p></main></div>
+<script>var ahb=document.getElementById('ahb');if(ahb)ahb.addEventListener('click',function(){var o=document.getElementById('anl').classList.toggle('open');ahb.setAttribute('aria-expanded',o);});</script>
<script src="/admin/render.js"></script></body></html>`;
}
diff --git a/public/admin/analytics.html b/public/admin/analytics.html
index c175764..ea8827a 100644
--- a/public/admin/analytics.html
+++ b/public/admin/analytics.html
@@ -7,8 +7,17 @@ a{color:inherit;text-decoration:none}.wrap{max-width:1240px;margin:0 auto;paddin
.abrand{font-family:'Playfair Display',serif;font-size:20px}.abrand span{color:var(--a)}.abrand small{font-family:'Inter';font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--sub);margin-left:8px}
.abar a{font-size:12px;color:var(--sub)}.abar a:hover{color:var(--ink)}
.ah{padding:20px 0 4px}.ah h1{font-size:20px}.ah p{color:var(--sub);font-size:13px}
-#app{padding:18px 0 60px;min-height:60vh}</style></head>
+#app{padding:18px 0 60px;min-height:60vh}
+.anav{background:var(--pan);border-bottom:1px solid var(--ln);position:sticky;top:0;z-index:20}
+.anav .wrap{display:flex;gap:2px;align-items:center;height:44px}
+.aham{display:none;background:none;border:0;font-size:22px;line-height:1;color:var(--ink);cursor:pointer;margin-left:auto;padding:6px 10px 6px 0}
+.anl{display:flex;gap:4px;align-items:center;overflow-x:auto}
+.anav a{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--sub);padding:11px 12px;white-space:nowrap;border-bottom:3px solid transparent}
+.anav a:hover{color:var(--a);border-color:var(--a)}
+@media(max-width:820px){.aham{display:block}.anl{display:none;position:absolute;top:44px;left:0;right:0;background:var(--pan);flex-direction:column;align-items:stretch;border-bottom:1px solid var(--ln);box-shadow:0 12px 26px rgba(0,0,0,.4);z-index:30}.anl.open{display:flex}.anl a{padding:13px 20px;border-bottom:1px solid var(--ln)}}</style></head>
<body data-ver="analytics" class="ver-analytics">
<div class="abar"><div class="wrap"><div class="abrand">REN<span>TV</span> Admin<small>Analytics First</small></div><a href="/admin">← all 10 admin versions</a></div></div>
+<div class="anav"><div class="wrap"><button class="aham" id="ahb" aria-label="Menu" aria-expanded="false">☰</button><div class="anl" id="anl"><a href="/admin">Dashboards</a><a href="/admin/publish">Publish</a><a href="/blog">Blog</a><a href="/">Main site ↗</a></div></div></div>
<div class="wrap"><div class="ah"><h1>Analytics First</h1><p>One giant headline metric, then supporting stats and a table. · live gated data</p></div><main id="app"><p style="color:var(--sub);padding:30px">Loading admin data…</p></main></div>
+<script>var ahb=document.getElementById('ahb');if(ahb)ahb.addEventListener('click',function(){var o=document.getElementById('anl').classList.toggle('open');ahb.setAttribute('aria-expanded',o);});</script>
<script src="/admin/render.js"></script></body></html>
\ No newline at end of file
diff --git a/public/admin/cards.html b/public/admin/cards.html
index 9cf6086..966b064 100644
--- a/public/admin/cards.html
+++ b/public/admin/cards.html
@@ -7,8 +7,17 @@ a{color:inherit;text-decoration:none}.wrap{max-width:1240px;margin:0 auto;paddin
.abrand{font-family:'Playfair Display',serif;font-size:20px}.abrand span{color:var(--a)}.abrand small{font-family:'Inter';font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--sub);margin-left:8px}
.abar a{font-size:12px;color:var(--sub)}.abar a:hover{color:var(--ink)}
.ah{padding:20px 0 4px}.ah h1{font-size:20px}.ah p{color:var(--sub);font-size:13px}
-#app{padding:18px 0 60px;min-height:60vh}</style></head>
+#app{padding:18px 0 60px;min-height:60vh}
+.anav{background:var(--pan);border-bottom:1px solid var(--ln);position:sticky;top:0;z-index:20}
+.anav .wrap{display:flex;gap:2px;align-items:center;height:44px}
+.aham{display:none;background:none;border:0;font-size:22px;line-height:1;color:var(--ink);cursor:pointer;margin-left:auto;padding:6px 10px 6px 0}
+.anl{display:flex;gap:4px;align-items:center;overflow-x:auto}
+.anav a{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--sub);padding:11px 12px;white-space:nowrap;border-bottom:3px solid transparent}
+.anav a:hover{color:var(--a);border-color:var(--a)}
+@media(max-width:820px){.aham{display:block}.anl{display:none;position:absolute;top:44px;left:0;right:0;background:var(--pan);flex-direction:column;align-items:stretch;border-bottom:1px solid var(--ln);box-shadow:0 12px 26px rgba(0,0,0,.4);z-index:30}.anl.open{display:flex}.anl a{padding:13px 20px;border-bottom:1px solid var(--ln)}}</style></head>
<body data-ver="cards" class="ver-cards">
<div class="abar"><div class="wrap"><div class="abrand">REN<span>TV</span> Admin<small>Module Grid</small></div><a href="/admin">← all 10 admin versions</a></div></div>
+<div class="anav"><div class="wrap"><button class="aham" id="ahb" aria-label="Menu" aria-expanded="false">☰</button><div class="anl" id="anl"><a href="/admin">Dashboards</a><a href="/admin/publish">Publish</a><a href="/blog">Blog</a><a href="/">Main site ↗</a></div></div></div>
<div class="wrap"><div class="ah"><h1>Module Grid</h1><p>Independent widget cards you can scan at a glance. · live gated data</p></div><main id="app"><p style="color:var(--sub);padding:30px">Loading admin data…</p></main></div>
+<script>var ahb=document.getElementById('ahb');if(ahb)ahb.addEventListener('click',function(){var o=document.getElementById('anl').classList.toggle('open');ahb.setAttribute('aria-expanded',o);});</script>
<script src="/admin/render.js"></script></body></html>
\ No newline at end of file
diff --git a/public/admin/classic.html b/public/admin/classic.html
index 13c6485..ae26804 100644
--- a/public/admin/classic.html
+++ b/public/admin/classic.html
@@ -7,8 +7,17 @@ a{color:inherit;text-decoration:none}.wrap{max-width:1240px;margin:0 auto;paddin
.abrand{font-family:'Playfair Display',serif;font-size:20px}.abrand span{color:var(--a)}.abrand small{font-family:'Inter';font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--sub);margin-left:8px}
.abar a{font-size:12px;color:var(--sub)}.abar a:hover{color:var(--ink)}
.ah{padding:20px 0 4px}.ah h1{font-size:20px}.ah p{color:var(--sub);font-size:13px}
-#app{padding:18px 0 60px;min-height:60vh}</style></head>
+#app{padding:18px 0 60px;min-height:60vh}
+.anav{background:var(--pan);border-bottom:1px solid var(--ln);position:sticky;top:0;z-index:20}
+.anav .wrap{display:flex;gap:2px;align-items:center;height:44px}
+.aham{display:none;background:none;border:0;font-size:22px;line-height:1;color:var(--ink);cursor:pointer;margin-left:auto;padding:6px 10px 6px 0}
+.anl{display:flex;gap:4px;align-items:center;overflow-x:auto}
+.anav a{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--sub);padding:11px 12px;white-space:nowrap;border-bottom:3px solid transparent}
+.anav a:hover{color:var(--a);border-color:var(--a)}
+@media(max-width:820px){.aham{display:block}.anl{display:none;position:absolute;top:44px;left:0;right:0;background:var(--pan);flex-direction:column;align-items:stretch;border-bottom:1px solid var(--ln);box-shadow:0 12px 26px rgba(0,0,0,.4);z-index:30}.anl.open{display:flex}.anl a{padding:13px 20px;border-bottom:1px solid var(--ln)}}</style></head>
<body data-ver="classic" class="ver-classic">
<div class="abar"><div class="wrap"><div class="abrand">REN<span>TV</span> Admin<small>Classic Dashboard</small></div><a href="/admin">← all 10 admin versions</a></div></div>
+<div class="anav"><div class="wrap"><button class="aham" id="ahb" aria-label="Menu" aria-expanded="false">☰</button><div class="anl" id="anl"><a href="/admin">Dashboards</a><a href="/admin/publish">Publish</a><a href="/blog">Blog</a><a href="/">Main site ↗</a></div></div></div>
<div class="wrap"><div class="ah"><h1>Classic Dashboard</h1><p>KPI cards up top, two data tables below. The safe, familiar admin. · live gated data</p></div><main id="app"><p style="color:var(--sub);padding:30px">Loading admin data…</p></main></div>
+<script>var ahb=document.getElementById('ahb');if(ahb)ahb.addEventListener('click',function(){var o=document.getElementById('anl').classList.toggle('open');ahb.setAttribute('aria-expanded',o);});</script>
<script src="/admin/render.js"></script></body></html>
\ No newline at end of file
diff --git a/public/admin/command.html b/public/admin/command.html
index 301d21c..25cd573 100644
--- a/public/admin/command.html
+++ b/public/admin/command.html
@@ -7,8 +7,17 @@ a{color:inherit;text-decoration:none}.wrap{max-width:1240px;margin:0 auto;paddin
.abrand{font-family:'Playfair Display',serif;font-size:20px}.abrand span{color:var(--a)}.abrand small{font-family:'Inter';font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--sub);margin-left:8px}
.abar a{font-size:12px;color:var(--sub)}.abar a:hover{color:var(--ink)}
.ah{padding:20px 0 4px}.ah h1{font-size:20px}.ah p{color:var(--sub);font-size:13px}
-#app{padding:18px 0 60px;min-height:60vh}</style></head>
+#app{padding:18px 0 60px;min-height:60vh}
+.anav{background:var(--pan);border-bottom:1px solid var(--ln);position:sticky;top:0;z-index:20}
+.anav .wrap{display:flex;gap:2px;align-items:center;height:44px}
+.aham{display:none;background:none;border:0;font-size:22px;line-height:1;color:var(--ink);cursor:pointer;margin-left:auto;padding:6px 10px 6px 0}
+.anl{display:flex;gap:4px;align-items:center;overflow-x:auto}
+.anav a{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--sub);padding:11px 12px;white-space:nowrap;border-bottom:3px solid transparent}
+.anav a:hover{color:var(--a);border-color:var(--a)}
+@media(max-width:820px){.aham{display:block}.anl{display:none;position:absolute;top:44px;left:0;right:0;background:var(--pan);flex-direction:column;align-items:stretch;border-bottom:1px solid var(--ln);box-shadow:0 12px 26px rgba(0,0,0,.4);z-index:30}.anl.open{display:flex}.anl a{padding:13px 20px;border-bottom:1px solid var(--ln)}}</style></head>
<body data-ver="command" class="ver-command">
<div class="abar"><div class="wrap"><div class="abrand">REN<span>TV</span> Admin<small>Command Center</small></div><a href="/admin">← all 10 admin versions</a></div></div>
+<div class="anav"><div class="wrap"><button class="aham" id="ahb" aria-label="Menu" aria-expanded="false">☰</button><div class="anl" id="anl"><a href="/admin">Dashboards</a><a href="/admin/publish">Publish</a><a href="/blog">Blog</a><a href="/">Main site ↗</a></div></div></div>
<div class="wrap"><div class="ah"><h1>Command Center</h1><p>Multi-panel grid — every surface (subs, feed, video, market) at once. · live gated data</p></div><main id="app"><p style="color:var(--sub);padding:30px">Loading admin data…</p></main></div>
+<script>var ahb=document.getElementById('ahb');if(ahb)ahb.addEventListener('click',function(){var o=document.getElementById('anl').classList.toggle('open');ahb.setAttribute('aria-expanded',o);});</script>
<script src="/admin/render.js"></script></body></html>
\ No newline at end of file
diff --git a/public/admin/console.html b/public/admin/console.html
index 407521e..3689b10 100644
--- a/public/admin/console.html
+++ b/public/admin/console.html
@@ -7,8 +7,17 @@ a{color:inherit;text-decoration:none}.wrap{max-width:1240px;margin:0 auto;paddin
.abrand{font-family:'Playfair Display',serif;font-size:20px}.abrand span{color:var(--a)}.abrand small{font-family:'Inter';font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--sub);margin-left:8px}
.abar a{font-size:12px;color:var(--sub)}.abar a:hover{color:var(--ink)}
.ah{padding:20px 0 4px}.ah h1{font-size:20px}.ah p{color:var(--sub);font-size:13px}
-#app{padding:18px 0 60px;min-height:60vh}</style></head>
+#app{padding:18px 0 60px;min-height:60vh}
+.anav{background:var(--pan);border-bottom:1px solid var(--ln);position:sticky;top:0;z-index:20}
+.anav .wrap{display:flex;gap:2px;align-items:center;height:44px}
+.aham{display:none;background:none;border:0;font-size:22px;line-height:1;color:var(--ink);cursor:pointer;margin-left:auto;padding:6px 10px 6px 0}
+.anl{display:flex;gap:4px;align-items:center;overflow-x:auto}
+.anav a{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--sub);padding:11px 12px;white-space:nowrap;border-bottom:3px solid transparent}
+.anav a:hover{color:var(--a);border-color:var(--a)}
+@media(max-width:820px){.aham{display:block}.anl{display:none;position:absolute;top:44px;left:0;right:0;background:var(--pan);flex-direction:column;align-items:stretch;border-bottom:1px solid var(--ln);box-shadow:0 12px 26px rgba(0,0,0,.4);z-index:30}.anl.open{display:flex}.anl a{padding:13px 20px;border-bottom:1px solid var(--ln)}}</style></head>
<body data-ver="console" class="ver-console">
<div class="abar"><div class="wrap"><div class="abrand">REN<span>TV</span> Admin<small>Ops Console</small></div><a href="/admin">← all 10 admin versions</a></div></div>
+<div class="anav"><div class="wrap"><button class="aham" id="ahb" aria-label="Menu" aria-expanded="false">☰</button><div class="anl" id="anl"><a href="/admin">Dashboards</a><a href="/admin/publish">Publish</a><a href="/blog">Blog</a><a href="/">Main site ↗</a></div></div></div>
<div class="wrap"><div class="ah"><h1>Ops Console</h1><p>Monospace metrics row + a live activity log. For the data-desk operator. · live gated data</p></div><main id="app"><p style="color:var(--sub);padding:30px">Loading admin data…</p></main></div>
+<script>var ahb=document.getElementById('ahb');if(ahb)ahb.addEventListener('click',function(){var o=document.getElementById('anl').classList.toggle('open');ahb.setAttribute('aria-expanded',o);});</script>
<script src="/admin/render.js"></script></body></html>
\ No newline at end of file
diff --git a/public/admin/index.html b/public/admin/index.html
index 8337b7a..49eafc5 100644
--- a/public/admin/index.html
+++ b/public/admin/index.html
@@ -8,6 +8,13 @@ a{color:inherit;text-decoration:none}.wrap{max-width:1240px;margin:0 auto;paddin
.abar a{font-size:12px;color:var(--sub)}.abar a:hover{color:var(--ink)}
.ah{padding:20px 0 4px}.ah h1{font-size:20px}.ah p{color:var(--sub);font-size:13px}
#app{padding:18px 0 60px;min-height:60vh}
+.anav{background:var(--pan);border-bottom:1px solid var(--ln);position:sticky;top:0;z-index:20}
+.anav .wrap{display:flex;gap:2px;align-items:center;height:44px}
+.aham{display:none;background:none;border:0;font-size:22px;line-height:1;color:var(--ink);cursor:pointer;margin-left:auto;padding:6px 10px 6px 0}
+.anl{display:flex;gap:4px;align-items:center;overflow-x:auto}
+.anav a{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--sub);padding:11px 12px;white-space:nowrap;border-bottom:3px solid transparent}
+.anav a:hover{color:var(--a);border-color:var(--a)}
+@media(max-width:820px){.aham{display:block}.anl{display:none;position:absolute;top:44px;left:0;right:0;background:var(--pan);flex-direction:column;align-items:stretch;border-bottom:1px solid var(--ln);box-shadow:0 12px 26px rgba(0,0,0,.4);z-index:30}.anl.open{display:flex}.anl a{padding:13px 20px;border-bottom:1px solid var(--ln)}}
.hd{padding:44px 0 6px;text-align:center}.hd h1{font-family:'Playfair Display',serif;font-size:clamp(28px,5vw,48px)}.hd h1 span{color:var(--a)}.hd p{color:var(--sub);margin-top:8px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;padding:28px 0 60px}
.vc{background:var(--pan);border:1px solid var(--ln);border-radius:10px;padding:20px;transition:.2s}
diff --git a/public/admin/kanban.html b/public/admin/kanban.html
index 5c294e8..eb1bf30 100644
--- a/public/admin/kanban.html
+++ b/public/admin/kanban.html
@@ -7,8 +7,17 @@ a{color:inherit;text-decoration:none}.wrap{max-width:1240px;margin:0 auto;paddin
.abrand{font-family:'Playfair Display',serif;font-size:20px}.abrand span{color:var(--a)}.abrand small{font-family:'Inter';font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--sub);margin-left:8px}
.abar a{font-size:12px;color:var(--sub)}.abar a:hover{color:var(--ink)}
.ah{padding:20px 0 4px}.ah h1{font-size:20px}.ah p{color:var(--sub);font-size:13px}
-#app{padding:18px 0 60px;min-height:60vh}</style></head>
+#app{padding:18px 0 60px;min-height:60vh}
+.anav{background:var(--pan);border-bottom:1px solid var(--ln);position:sticky;top:0;z-index:20}
+.anav .wrap{display:flex;gap:2px;align-items:center;height:44px}
+.aham{display:none;background:none;border:0;font-size:22px;line-height:1;color:var(--ink);cursor:pointer;margin-left:auto;padding:6px 10px 6px 0}
+.anl{display:flex;gap:4px;align-items:center;overflow-x:auto}
+.anav a{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--sub);padding:11px 12px;white-space:nowrap;border-bottom:3px solid transparent}
+.anav a:hover{color:var(--a);border-color:var(--a)}
+@media(max-width:820px){.aham{display:block}.anl{display:none;position:absolute;top:44px;left:0;right:0;background:var(--pan);flex-direction:column;align-items:stretch;border-bottom:1px solid var(--ln);box-shadow:0 12px 26px rgba(0,0,0,.4);z-index:30}.anl.open{display:flex}.anl a{padding:13px 20px;border-bottom:1px solid var(--ln)}}</style></head>
<body data-ver="kanban" class="ver-kanban">
<div class="abar"><div class="wrap"><div class="abrand">REN<span>TV</span> Admin<small>Kanban Board</small></div><a href="/admin">← all 10 admin versions</a></div></div>
+<div class="anav"><div class="wrap"><button class="aham" id="ahb" aria-label="Menu" aria-expanded="false">☰</button><div class="anl" id="anl"><a href="/admin">Dashboards</a><a href="/admin/publish">Publish</a><a href="/blog">Blog</a><a href="/">Main site ↗</a></div></div></div>
<div class="wrap"><div class="ah"><h1>Kanban Board</h1><p>Stories grouped into columns by sector — editorial pipeline view. · live gated data</p></div><main id="app"><p style="color:var(--sub);padding:30px">Loading admin data…</p></main></div>
+<script>var ahb=document.getElementById('ahb');if(ahb)ahb.addEventListener('click',function(){var o=document.getElementById('anl').classList.toggle('open');ahb.setAttribute('aria-expanded',o);});</script>
<script src="/admin/render.js"></script></body></html>
\ No newline at end of file
diff --git a/public/admin/minimal.html b/public/admin/minimal.html
index ce4d76c..aac3e13 100644
--- a/public/admin/minimal.html
+++ b/public/admin/minimal.html
@@ -7,8 +7,17 @@ a{color:inherit;text-decoration:none}.wrap{max-width:1240px;margin:0 auto;paddin
.abrand{font-family:'Playfair Display',serif;font-size:20px}.abrand span{color:var(--a)}.abrand small{font-family:'Inter';font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--sub);margin-left:8px}
.abar a{font-size:12px;color:var(--sub)}.abar a:hover{color:var(--ink)}
.ah{padding:20px 0 4px}.ah h1{font-size:20px}.ah p{color:var(--sub);font-size:13px}
-#app{padding:18px 0 60px;min-height:60vh}</style></head>
+#app{padding:18px 0 60px;min-height:60vh}
+.anav{background:var(--pan);border-bottom:1px solid var(--ln);position:sticky;top:0;z-index:20}
+.anav .wrap{display:flex;gap:2px;align-items:center;height:44px}
+.aham{display:none;background:none;border:0;font-size:22px;line-height:1;color:var(--ink);cursor:pointer;margin-left:auto;padding:6px 10px 6px 0}
+.anl{display:flex;gap:4px;align-items:center;overflow-x:auto}
+.anav a{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--sub);padding:11px 12px;white-space:nowrap;border-bottom:3px solid transparent}
+.anav a:hover{color:var(--a);border-color:var(--a)}
+@media(max-width:820px){.aham{display:block}.anl{display:none;position:absolute;top:44px;left:0;right:0;background:var(--pan);flex-direction:column;align-items:stretch;border-bottom:1px solid var(--ln);box-shadow:0 12px 26px rgba(0,0,0,.4);z-index:30}.anl.open{display:flex}.anl a{padding:13px 20px;border-bottom:1px solid var(--ln)}}</style></head>
<body data-ver="minimal" class="ver-minimal">
<div class="abar"><div class="wrap"><div class="abrand">REN<span>TV</span> Admin<small>Minimal</small></div><a href="/admin">← all 10 admin versions</a></div></div>
+<div class="anav"><div class="wrap"><button class="aham" id="ahb" aria-label="Menu" aria-expanded="false">☰</button><div class="anl" id="anl"><a href="/admin">Dashboards</a><a href="/admin/publish">Publish</a><a href="/blog">Blog</a><a href="/">Main site ↗</a></div></div></div>
<div class="wrap"><div class="ah"><h1>Minimal</h1><p>Quiet single-column stat sheet. No chrome, just the numbers. · live gated data</p></div><main id="app"><p style="color:var(--sub);padding:30px">Loading admin data…</p></main></div>
+<script>var ahb=document.getElementById('ahb');if(ahb)ahb.addEventListener('click',function(){var o=document.getElementById('anl').classList.toggle('open');ahb.setAttribute('aria-expanded',o);});</script>
<script src="/admin/render.js"></script></body></html>
\ No newline at end of file
diff --git a/public/admin/sidebar.html b/public/admin/sidebar.html
index 538d35d..e8eeda9 100644
--- a/public/admin/sidebar.html
+++ b/public/admin/sidebar.html
@@ -7,8 +7,17 @@ a{color:inherit;text-decoration:none}.wrap{max-width:1240px;margin:0 auto;paddin
.abrand{font-family:'Playfair Display',serif;font-size:20px}.abrand span{color:var(--a)}.abrand small{font-family:'Inter';font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--sub);margin-left:8px}
.abar a{font-size:12px;color:var(--sub)}.abar a:hover{color:var(--ink)}
.ah{padding:20px 0 4px}.ah h1{font-size:20px}.ah p{color:var(--sub);font-size:13px}
-#app{padding:18px 0 60px;min-height:60vh}</style></head>
+#app{padding:18px 0 60px;min-height:60vh}
+.anav{background:var(--pan);border-bottom:1px solid var(--ln);position:sticky;top:0;z-index:20}
+.anav .wrap{display:flex;gap:2px;align-items:center;height:44px}
+.aham{display:none;background:none;border:0;font-size:22px;line-height:1;color:var(--ink);cursor:pointer;margin-left:auto;padding:6px 10px 6px 0}
+.anl{display:flex;gap:4px;align-items:center;overflow-x:auto}
+.anav a{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--sub);padding:11px 12px;white-space:nowrap;border-bottom:3px solid transparent}
+.anav a:hover{color:var(--a);border-color:var(--a)}
+@media(max-width:820px){.aham{display:block}.anl{display:none;position:absolute;top:44px;left:0;right:0;background:var(--pan);flex-direction:column;align-items:stretch;border-bottom:1px solid var(--ln);box-shadow:0 12px 26px rgba(0,0,0,.4);z-index:30}.anl.open{display:flex}.anl a{padding:13px 20px;border-bottom:1px solid var(--ln)}}</style></head>
<body data-ver="sidebar" class="ver-sidebar">
<div class="abar"><div class="wrap"><div class="abrand">REN<span>TV</span> Admin<small>Sidebar Console</small></div><a href="/admin">← all 10 admin versions</a></div></div>
+<div class="anav"><div class="wrap"><button class="aham" id="ahb" aria-label="Menu" aria-expanded="false">☰</button><div class="anl" id="anl"><a href="/admin">Dashboards</a><a href="/admin/publish">Publish</a><a href="/blog">Blog</a><a href="/">Main site ↗</a></div></div></div>
<div class="wrap"><div class="ah"><h1>Sidebar Console</h1><p>Left nav rail + main panel — the SaaS-standard admin shell. · live gated data</p></div><main id="app"><p style="color:var(--sub);padding:30px">Loading admin data…</p></main></div>
+<script>var ahb=document.getElementById('ahb');if(ahb)ahb.addEventListener('click',function(){var o=document.getElementById('anl').classList.toggle('open');ahb.setAttribute('aria-expanded',o);});</script>
<script src="/admin/render.js"></script></body></html>
\ No newline at end of file
diff --git a/public/admin/split.html b/public/admin/split.html
index c6bda6b..40b0fa6 100644
--- a/public/admin/split.html
+++ b/public/admin/split.html
@@ -7,8 +7,17 @@ a{color:inherit;text-decoration:none}.wrap{max-width:1240px;margin:0 auto;paddin
.abrand{font-family:'Playfair Display',serif;font-size:20px}.abrand span{color:var(--a)}.abrand small{font-family:'Inter';font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--sub);margin-left:8px}
.abar a{font-size:12px;color:var(--sub)}.abar a:hover{color:var(--ink)}
.ah{padding:20px 0 4px}.ah h1{font-size:20px}.ah p{color:var(--sub);font-size:13px}
-#app{padding:18px 0 60px;min-height:60vh}</style></head>
+#app{padding:18px 0 60px;min-height:60vh}
+.anav{background:var(--pan);border-bottom:1px solid var(--ln);position:sticky;top:0;z-index:20}
+.anav .wrap{display:flex;gap:2px;align-items:center;height:44px}
+.aham{display:none;background:none;border:0;font-size:22px;line-height:1;color:var(--ink);cursor:pointer;margin-left:auto;padding:6px 10px 6px 0}
+.anl{display:flex;gap:4px;align-items:center;overflow-x:auto}
+.anav a{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--sub);padding:11px 12px;white-space:nowrap;border-bottom:3px solid transparent}
+.anav a:hover{color:var(--a);border-color:var(--a)}
+@media(max-width:820px){.aham{display:block}.anl{display:none;position:absolute;top:44px;left:0;right:0;background:var(--pan);flex-direction:column;align-items:stretch;border-bottom:1px solid var(--ln);box-shadow:0 12px 26px rgba(0,0,0,.4);z-index:30}.anl.open{display:flex}.anl a{padding:13px 20px;border-bottom:1px solid var(--ln)}}</style></head>
<body data-ver="split" class="ver-split">
<div class="abar"><div class="wrap"><div class="abrand">REN<span>TV</span> Admin<small>Master–Detail</small></div><a href="/admin">← all 10 admin versions</a></div></div>
+<div class="anav"><div class="wrap"><button class="aham" id="ahb" aria-label="Menu" aria-expanded="false">☰</button><div class="anl" id="anl"><a href="/admin">Dashboards</a><a href="/admin/publish">Publish</a><a href="/blog">Blog</a><a href="/">Main site ↗</a></div></div></div>
<div class="wrap"><div class="ah"><h1>Master–Detail</h1><p>Scrollable list on the left, KPI rail on the right. · live gated data</p></div><main id="app"><p style="color:var(--sub);padding:30px">Loading admin data…</p></main></div>
+<script>var ahb=document.getElementById('ahb');if(ahb)ahb.addEventListener('click',function(){var o=document.getElementById('anl').classList.toggle('open');ahb.setAttribute('aria-expanded',o);});</script>
<script src="/admin/render.js"></script></body></html>
\ No newline at end of file
diff --git a/public/admin/table.html b/public/admin/table.html
index 3845a7a..9b9c3cb 100644
--- a/public/admin/table.html
+++ b/public/admin/table.html
@@ -7,8 +7,17 @@ a{color:inherit;text-decoration:none}.wrap{max-width:1240px;margin:0 auto;paddin
.abrand{font-family:'Playfair Display',serif;font-size:20px}.abrand span{color:var(--a)}.abrand small{font-family:'Inter';font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--sub);margin-left:8px}
.abar a{font-size:12px;color:var(--sub)}.abar a:hover{color:var(--ink)}
.ah{padding:20px 0 4px}.ah h1{font-size:20px}.ah p{color:var(--sub);font-size:13px}
-#app{padding:18px 0 60px;min-height:60vh}</style></head>
+#app{padding:18px 0 60px;min-height:60vh}
+.anav{background:var(--pan);border-bottom:1px solid var(--ln);position:sticky;top:0;z-index:20}
+.anav .wrap{display:flex;gap:2px;align-items:center;height:44px}
+.aham{display:none;background:none;border:0;font-size:22px;line-height:1;color:var(--ink);cursor:pointer;margin-left:auto;padding:6px 10px 6px 0}
+.anl{display:flex;gap:4px;align-items:center;overflow-x:auto}
+.anav a{font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--sub);padding:11px 12px;white-space:nowrap;border-bottom:3px solid transparent}
+.anav a:hover{color:var(--a);border-color:var(--a)}
+@media(max-width:820px){.aham{display:block}.anl{display:none;position:absolute;top:44px;left:0;right:0;background:var(--pan);flex-direction:column;align-items:stretch;border-bottom:1px solid var(--ln);box-shadow:0 12px 26px rgba(0,0,0,.4);z-index:30}.anl.open{display:flex}.anl a{padding:13px 20px;border-bottom:1px solid var(--ln)}}</style></head>
<body data-ver="table" class="ver-table">
<div class="abar"><div class="wrap"><div class="abrand">REN<span>TV</span> Admin<small>Data Table</small></div><a href="/admin">← all 10 admin versions</a></div></div>
+<div class="anav"><div class="wrap"><button class="aham" id="ahb" aria-label="Menu" aria-expanded="false">☰</button><div class="anl" id="anl"><a href="/admin">Dashboards</a><a href="/admin/publish">Publish</a><a href="/blog">Blog</a><a href="/">Main site ↗</a></div></div></div>
<div class="wrap"><div class="ah"><h1>Data Table</h1><p>Dense spreadsheet-style rows — power-user, keyboard-first feel. · live gated data</p></div><main id="app"><p style="color:var(--sub);padding:30px">Loading admin data…</p></main></div>
+<script>var ahb=document.getElementById('ahb');if(ahb)ahb.addEventListener('click',function(){var o=document.getElementById('anl').classList.toggle('open');ahb.setAttribute('aria-expanded',o);});</script>
<script src="/admin/render.js"></script></body></html>
\ No newline at end of file
← b28c3f1 rentv-v1 versions: add clean nav + mobile hamburger to all 1
·
back to Rentv V1
·
chore: v0.3.0 (session close — blog CMS, 10 versions/themes/ adc26a3 →