diff --git a/index.html b/index.html
index 91ca898..7c09ff1 100644
--- a/index.html
+++ b/index.html
@@ -19,38 +19,48 @@
diff --git a/src/templates/explorer.ts b/src/templates/explorer.ts
index 34a0adb..4ea1b99 100644
--- a/src/templates/explorer.ts
+++ b/src/templates/explorer.ts
@@ -7,6 +7,7 @@
*/
import type { EcosystemStats } from '../db/queries.js'
+import { renderPublicFooter, renderPublicHeadStart, renderPublicNav } from './publicPage.js'
export function explorerDashboardHtml(stats: EcosystemStats): string {
const tierOrder = ['Elite', 'Trusted', 'Established', 'Emerging', 'Unverified']
@@ -33,32 +34,33 @@ export function explorerDashboardHtml(stats: EcosystemStats): string {
})
.join('')
- return `
-
-
-
@@ -734,6 +722,7 @@ async function loadLB() {
});
})();
-
-`
+${renderPublicFooter({
+ copy: 'Explorer is the live dashboard view into DJD trust infrastructure on Base. It keeps the same brand system as the pricing and certification surfaces while preserving its operational layout.',
+})}`
}
diff --git a/src/templates/legal.ts b/src/templates/legal.ts
index 1165a57..cad2b34 100644
--- a/src/templates/legal.ts
+++ b/src/templates/legal.ts
@@ -1,36 +1,93 @@
import { getSupportEmail } from '../config/public.js'
+import { renderPublicPage } from './publicPage.js'
// ─── Legal page templates ───
// White theme (Terms/Privacy), dark GitHub theme (Leaderboard)
const SUPPORT_EMAIL = getSupportEmail()
-export const wrapHtml = (title: string, content: string) => `
-
-
-
-
-
${title} - DJD Agent Score
-
-
-${content}
-
-
-`
+export const wrapHtml = (title: string, content: string) =>
+ `${renderPublicPage({
+ title: `${title} - DJD Agent Score`,
+ description: `${title} for DJD Agent Score, the trust infrastructure platform for the agent economy.`,
+ path: title === 'Terms of Service' ? '/terms' : title === 'Privacy Policy' ? '/privacy' : '/',
+ ctaHref: '/pricing',
+ ctaLabel: 'View Pricing',
+ extraCss: `
+.legal-shell{padding-top:56px}
+.legal-article{max-width:900px}
+.legal-prose h1{
+ font-size:28px;
+ margin-top:38px;
+ margin-bottom:16px;
+ color:var(--text);
+ font-family:'Instrument Serif',serif;
+ font-weight:400;
+ letter-spacing:-0.02em;
+}
+.legal-prose h2{
+ font-size:20px;
+ margin-top:28px;
+ margin-bottom:12px;
+ color:var(--text);
+ font-weight:700;
+}
+.legal-prose p{
+ margin-bottom:16px;
+ font-size:15px;
+ color:var(--text-dim);
+ line-height:1.82;
+}
+.legal-prose .title{
+ text-align:center;
+ margin-bottom:8px;
+ font-size:42px;
+ line-height:1.02;
+}
+.legal-prose .subtitle{
+ text-align:center;
+ margin-bottom:8px;
+ font-size:32px;
+ line-height:1.08;
+}
+.legal-prose .date{
+ text-align:center;
+ margin-bottom:40px;
+ color:var(--text-muted);
+ font-style:italic;
+}
+.legal-prose .caps{text-transform:uppercase}
+.legal-prose table{
+ border-collapse:collapse;
+ width:100%;
+ margin:18px 0;
+ border-radius:16px;
+ overflow:hidden;
+ border:1px solid var(--border);
+}
+.legal-prose th,
+.legal-prose td{
+ border-bottom:1px solid var(--border);
+ padding:12px 14px;
+ font-size:14px;
+ text-align:left;
+}
+.legal-prose th{
+ background:rgba(17,35,58,0.96);
+ color:var(--text);
+ font-family:'JetBrains Mono',monospace;
+ font-size:10px;
+ font-weight:700;
+ letter-spacing:0.08em;
+ text-transform:uppercase;
+}
+.legal-prose td{color:var(--text-dim)}
+.legal-prose tr:nth-child(even) td{background:rgba(7,17,31,0.38)}
+`,
+ footerCopy:
+ 'DJD Agent Score provides trust infrastructure for the agent economy. Legal pages use the same public brand system as the rest of the product.',
+ content: `
${content} `,
+ })}`
// ─── TERMS OF SERVICE ───
diff --git a/src/templates/publicPage.ts b/src/templates/publicPage.ts
index a0bdd88..3c7025c 100644
--- a/src/templates/publicPage.ts
+++ b/src/templates/publicPage.ts
@@ -512,11 +512,15 @@ nav{
.stat-grid{grid-template-columns:1fr}
}
@media(max-width:760px){
+ .nav-outer{position:sticky}
nav,
.site-shell,
.site-footer-inner{padding-left:20px;padding-right:20px}
- nav{height:auto;min-height:68px;padding-top:12px;padding-bottom:12px;align-items:flex-start}
- .nav-links{width:100%;justify-content:flex-start}
+ nav{height:auto;min-height:68px;padding-top:12px;padding-bottom:12px;align-items:flex-start;flex-wrap:wrap}
+ .logo{width:100%}
+ .nav-links{width:100%;justify-content:flex-start;gap:8px}
+ .nav-link{padding:7px 10px}
+ .nav-cta{margin-top:4px}
.hero{padding-top:56px}
.article-shell{margin-top:56px;padding:20px}
}
diff --git a/src/templates/reviewer.ts b/src/templates/reviewer.ts
index bb9f609..0ba202a 100644
--- a/src/templates/reviewer.ts
+++ b/src/templates/reviewer.ts
@@ -1,36 +1,32 @@
import { REVIEWER_SESSION_MAX_AGE_SECONDS } from '../middleware/reviewerSession.js'
+import { renderPublicPage } from './publicPage.js'
const REVIEWER_SESSION_HOURS = Math.floor(REVIEWER_SESSION_MAX_AGE_SECONDS / 3600)
export function reviewerPageHtml(): string {
- return `
-
-
-
-
-
Certification Reviewer Dashboard - DJD Agent Score
-
-
-
+`,
+ content: `
Certification Reviewer Dashboard
Internal operations surface for DJD Certify. Start a short-lived reviewer session with the admin key, inspect score and profile context, then approve, request more information, reject, or issue a certification from an approved review.
@@ -589,6 +583,7 @@ async function initDashboard(){
initDashboard();
-
-`
+
+ `,
+ })
}