diff --git a/docs/architecture/viewer.template.html b/docs/architecture/viewer.template.html
index c567495..56605b3 100644
--- a/docs/architecture/viewer.template.html
+++ b/docs/architecture/viewer.template.html
@@ -190,6 +190,7 @@ ol.steps .ev{display:block;color:var(--dim2);font-size:11.5px;margin-top:3px}
Search
+
@@ -379,6 +381,11 @@ const capById = Object.fromEntries(CAPS.capabilities.map(c => [c.id, c]));
const BLOCKREASON = new Set(['configuration missing','deployment missing',
'external dependency unavailable','scenario missing']);
const dotCls = v => v==='spec-only' ? 'speconly' : v;
+// The ledger carries markdown inline code, because docs/spec.md does. Rendering
+// it literally puts backticks on screen next to every path.
+const md = t => (t||'').replace(/[&<>]/g, m => ({'&':'&','<':'<','>':'>'}[m]))
+ .replace(/`([^`]+)`/g, '$1')
+ .replace(/\*\*([^*]+)\*\*/g, '$1');
function capRow(c){
const cls = {'capability missing':'missing','capability exists but unreachable':'unreachable',
@@ -436,7 +443,7 @@ function renderCapSide(id){
${c.title}
${c.section} · ${c.domain.join(', ')} · ${c.scope}${
c.implementation.gap_class==='none'?'':' · '+c.implementation.gap_class}
- ${c.state}
+ ${md(c.state)}
Implementation
${DIMS.map(d=>{
const v = c.implementation[d];
@@ -449,8 +456,8 @@ function renderCapSide(id){
Definition of done — ${c.criteria.length}
${c.criteria.map(cr=>`
${cr.verified}${cr.reason}
-
${cr.text}
- ${cr.detail?`
${cr.detail}
`:''}
+
${md(cr.text)}
+ ${cr.detail?`
${md(cr.detail)}
`:''}
${(cr.evidence||[]).length?`
${cr.evidence.join('
')}
`:''}
`).join('')}
Blockers — ${blockers.length}
@@ -659,6 +666,10 @@ document.getElementById('views').innerHTML = VIEWS.map(v=>`